Files
wiki/在线下单配送抢单小程序调研/报告/delivery-order-grabbing-mini-program-research.html
2026-05-14 16:56:48 +08:00

757 lines
35 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>在线下单配送抢单小程序调研报告</title>
<style>
/* ===== Ant Design 阿里云风格 Design Tokens ===== */
:root {
--color-primary: #1677FF;
--color-primary-hover: #4096FF;
--color-primary-active: #0958D9;
--color-primary-bg: #E6F4FF;
--color-success: #52C41A;
--color-warning: #FAAD14;
--color-error: #FF4D4F;
--color-info: #1677FF;
--bg: #F5F5F5;
--bg-container: #FFFFFF;
--bg-elevated: #FAFAFA;
--border: #D9D9D9;
--border-light: #F0F0F0;
--text-primary: #141414;
--text-secondary: #595959;
--text-tertiary: #8C8C8C;
--radius-sm: 6px;
--radius-md: 8px;
--radius-lg: 12px;
--shadow-sm: 0 1px 2px rgba(0,0,0,0.03), 0 1px 6px -1px rgba(0,0,0,0.02);
--shadow-md: 0 2px 4px rgba(0,0,0,0.04), 0 4px 12px -2px rgba(0,0,0,0.04);
--header-h: 64px;
--content-max: 1200px;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei',
'Helvetica Neue', Helvetica, Arial, sans-serif;
background: var(--bg);
color: var(--text-primary);
line-height: 1.57;
font-size: 14px;
}
/* ===== Header ===== */
.header-bar {
position: sticky;
top: 0;
height: var(--header-h);
background: rgba(255,255,255,0.85);
backdrop-filter: blur(12px);
border-bottom: 1px solid var(--border-light);
display: flex;
align-items: center;
padding: 0 40px;
z-index: 100;
}
.header-bar .brand { display: flex; align-items: baseline; gap: 12px; }
.header-bar h1 {
font-size: 18px;
font-weight: 700;
background: linear-gradient(135deg, var(--color-primary) 0%, #722ED1 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.header-bar .tagline { font-size: 12px; color: var(--text-tertiary); }
/* ===== Layout ===== */
.container { max-width: var(--content-max); margin: 0 auto; padding: 32px 40px 64px; }
/* ===== Sidebar Layout ===== */
.layout {
display: flex;
gap: 24px;
}
.sidebar {
width: 240px;
flex-shrink: 0;
position: sticky;
top: calc(var(--header-h) + 32px);
max-height: calc(100vh - var(--header-h) - 64px);
overflow-y: auto;
background: var(--bg-container);
border: 1px solid var(--border);
border-radius: var(--radius-md);
padding: 16px 0;
align-self: flex-start;
}
.sidebar-title {
font-size: 13px;
font-weight: 600;
color: var(--text-secondary);
padding: 0 16px 12px;
border-bottom: 1px solid var(--border-light);
margin-bottom: 8px;
}
.sidebar a {
display: block;
padding: 8px 16px;
font-size: 13px;
color: var(--text-secondary);
text-decoration: none;
border-left: 3px solid transparent;
transition: all 0.15s ease;
}
.sidebar a:hover, .sidebar a.active {
color: var(--color-primary);
background: var(--color-primary-bg);
border-left-color: var(--color-primary);
}
.main { flex: 1; min-width: 0; }
/* ===== Section ===== */
.section {
background: var(--bg-container);
border: 1px solid var(--border);
border-radius: var(--radius-md);
padding: 24px;
margin-bottom: 24px;
box-shadow: var(--shadow-sm);
}
.section-title {
font-size: 20px;
font-weight: 600;
margin-bottom: 16px;
padding-bottom: 12px;
border-bottom: 1px solid var(--border-light);
}
.section-title small {
font-size: 13px;
color: var(--text-tertiary);
font-weight: 400;
margin-left: 8px;
}
h3 {
font-size: 16px;
font-weight: 600;
margin: 20px 0 12px;
color: var(--text-primary);
}
h4 {
font-size: 14px;
font-weight: 600;
margin: 16px 0 8px;
color: var(--text-secondary);
}
p { margin: 8px 0; }
/* ===== Table ===== */
table {
width: 100%;
border-collapse: collapse;
margin: 12px 0;
font-size: 13px;
}
thead th {
background: var(--bg-elevated);
font-weight: 600;
text-align: left;
padding: 10px 14px;
border: 1px solid var(--border);
position: sticky;
top: 0;
}
tbody td {
padding: 10px 14px;
border: 1px solid var(--border);
vertical-align: top;
}
tbody tr:hover { background: var(--color-primary-bg); }
/* ===== Badges ===== */
.badge {
display: inline-block;
padding: 2px 10px;
border-radius: 12px;
font-size: 12px;
font-weight: 600;
}
.badge--success { background: #F6FFED; color: #52C41A; border: 1px solid #B7EB8F; }
.badge--warning { background: #FFFBE6; color: #FAAD14; border: 1px solid #FFE58F; }
.badge--error { background: #FFF2F0; color: #FF4D4F; border: 1px solid #FFCCC7; }
.badge--info { background: #E6F4FF; color: #1677FF; border: 1px solid #91CAFF; }
/* ===== Code ===== */
code {
background: var(--bg-elevated);
padding: 2px 8px;
border-radius: 4px;
font-size: 13px;
font-family: 'SF Mono', 'Menlo', 'Courier New', monospace;
color: var(--color-primary);
}
/* ===== Card ===== */
.info-card {
background: var(--bg-elevated);
border: 1px solid var(--border-light);
border-radius: var(--radius-sm);
padding: 16px;
margin: 12px 0;
}
.info-card .label {
font-size: 12px;
color: var(--text-tertiary);
margin-bottom: 4px;
}
.info-card .value {
font-size: 14px;
font-weight: 500;
}
/* ===== Progress ===== */
.progress-bar {
display: flex;
gap: 4px;
margin: 4px 0;
}
.progress-bar .dot {
width: 16px;
height: 16px;
border-radius: 3px;
}
.dot--filled { background: var(--color-primary); }
.dot--empty { background: var(--border-light); }
/* ===== Responsive ===== */
@media (max-width: 768px) {
.header-bar { padding: 0 16px; }
.header-bar h1 { font-size: 16px; }
.container { padding: 24px 16px 48px; }
.layout { flex-direction: column; }
.sidebar { width: 100%; position: static; max-height: none; }
table { font-size: 12px; }
thead th, tbody td { padding: 8px 10px; }
}
</style>
</head>
<body>
<header class="header-bar">
<div class="brand">
<h1>在线下单配送抢单小程序调研报告</h1>
<span class="tagline">Top 5 开源项目横向对比分析</span>
</div>
</header>
<div class="container">
<div class="layout">
<!-- Sidebar -->
<nav class="sidebar" id="sidebar">
<div class="sidebar-title">目录导航</div>
<a href="#overview">总览对比</a>
<a href="#dso2o">DSO2O 外卖</a>
<a href="#ddrun">叮点跑腿 ddrun</a>
<a href="#wanyue">万岳外卖系统</a>
<a href="#siam">暹罗外卖</a>
<a href="#minirun">MiniRun 校园跑腿</a>
<a href="#recommendation">综合建议</a>
</nav>
<!-- Main Content -->
<div class="main">
<!-- ==================== 总览对比 ==================== -->
<div class="section" id="overview">
<div class="section-title">总览对比 <small>5 个项目核心指标一览</small></div>
<table>
<thead>
<tr>
<th>项目</th>
<th>Star</th>
<th>前端</th>
<th>后端</th>
<th>数据库</th>
<th>商户模式</th>
<th>抢单功能</th>
<th>综合评分</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>DSO2O 外卖</strong></td>
<td>1,953</td>
<td>UniApp</td>
<td>ThinkPHP 6</td>
<td>MySQL</td>
<td>多商户</td>
<td><span class="badge badge--success">✅ 自动派单 + 抢单</span></td>
<td><strong>92/100</strong></td>
</tr>
<tr>
<td><strong>叮点跑腿 ddrun</strong></td>
<td>1,211</td>
<td>UniApp</td>
<td>Midway 3.0</td>
<td>MySQL</td>
<td>单商户</td>
<td><span class="badge badge--success">✅ 抢单 + 智能分配</span></td>
<td><strong>88/100</strong></td>
</tr>
<tr>
<td><strong>万岳外卖系统</strong></td>
<td>815</td>
<td>UniApp</td>
<td>ThinkCMF + PhalApi</td>
<td>MySQL</td>
<td>多商户</td>
<td><span class="badge badge--success">✅ 抢单 + 智能派单</span></td>
<td><strong>85/100</strong></td>
</tr>
<tr>
<td><strong>暹罗外卖</strong></td>
<td>479</td>
<td>原生小程序</td>
<td>Spring Cloud</td>
<td>MySQL + Redis</td>
<td>多商户</td>
<td><span class="badge badge--error">❌ 骑手端未开源</span></td>
<td><strong>55/100</strong></td>
</tr>
<tr>
<td><strong>MiniRun 校园跑腿</strong></td>
<td>174</td>
<td>微信小程序</td>
<td>微信云开发</td>
<td>云数据库</td>
<td>单商户</td>
<td><span class="badge badge--warning">⚠️ 任务接单</span></td>
<td><strong>65/100</strong></td>
</tr>
</tbody>
</table>
</div>
<!-- ==================== DSO2O 外卖 ==================== -->
<div class="section" id="dso2o">
<div class="section-title">DSO2O 外卖 <small>gitee.com/csdeshang/DSO2O_open · ⭐ 1,953</small></div>
<div class="info-card">
<div class="label">项目简介</div>
<div class="value">专业 O2O 本地生活平台,支持外卖送餐、同城跑腿、家政上门服务。ThinkPHP 6 + UniApp 架构,社区活跃度高,支持宝塔面板一键部署。</div>
</div>
<h3>技术方案</h3>
<table>
<thead><tr><th>层级</th><th>技术栈</th></tr></thead>
<tbody>
<tr><td>前端(小程序)</td><td>UniApp(跨端:微信小程序 + APP)</td></tr>
<tr><td>后端</td><td>ThinkPHP V6.0 + PHP + Composer 组件化</td></tr>
<tr><td>数据库</td><td>MySQL + Redis / Memcached 缓存</td></tr>
<tr><td>实时通信</td><td>Socket 长连接(骑手端实时订单推送)</td></tr>
<tr><td>部署</td><td>宝塔面板一键部署 / 常规 LNMP</td></tr>
</tbody>
</table>
<h3>前端(小程序端)功能完成度</h3>
<p><em>⚠️ 注意:小程序源码在独立 UniApp 仓库中(非本仓库),本仓库包含 PC 端模板和静态资源。</em></p>
<table>
<thead><tr><th>功能模块</th><th>完成度</th><th>说明</th></tr></thead>
<tbody>
<tr><td>用户下单</td><td><span class="badge badge--success">✅ 完整</span></td><td>商品浏览、购物车、在线下单、支付,支持多门店</td></tr>
<tr><td>配送方式选择</td><td><span class="badge badge--success">✅ 完整</span></td><td>外卖配送、到店自取、预约配送、同城跑腿、商家自配/平台配送/达达第三方配送</td></tr>
<tr><td>骑手抢单界面</td><td><span class="badge badge--success">✅ 完整</span></td><td>骑手端独立页面,订单大厅可抢订单,GatewayWorker WebSocket 实时推送</td></tr>
<tr><td>订单状态追踪</td><td><span class="badge badge--success">✅ 完整</span></td><td>全流程状态展示 + 订单日志 + 配送员地图定位</td></tr>
<tr><td>实时通知</td><td><span class="badge badge--success">✅ 完整</span></td><td>GatewayWorker WebSocket 长连接实时推送</td></tr>
<tr><td>商户管理界面</td><td><span class="badge badge--success">✅ 完整</span></td><td>PC 商家端 + 商家手机端,商品/订单/店铺管理</td></tr>
</tbody>
</table>
<h3>后端功能完成度</h3>
<table>
<thead><tr><th>功能模块</th><th>完成度</th><th>说明</th></tr></thead>
<tbody>
<tr><td>订单管理</td><td><span class="badge badge--success">✅ 完整</span></td><td>完整订单生命周期,含商品订单 + 跑腿订单 + 服务订单</td></tr>
<tr><td>配送方式配置</td><td><span class="badge badge--success">✅ 完整</span></td><td>后台可配置配送费计算规则、配送范围、支持三种配送模式</td></tr>
<tr><td>骑手抢单引擎</td><td><span class="badge badge--success">✅ 完整</span></td><td>WebSocket 推送抢单 + 自动派单 + 指定配送员,三种模式灵活切换</td></tr>
<tr><td>多商户管理</td><td><span class="badge badge--success">✅ 完整</span></td><td>多商户入驻、店铺等级、保证金、自营店铺,80+ 管理模块</td></tr>
<tr><td>骑手管理</td><td><span class="badge badge--success">✅ 完整</span></td><td>配送员注册/结算/投诉/保证金,平台配送 + 达达第三方配送</td></tr>
<tr><td>支付集成</td><td><span class="badge badge--success">✅ 完整</span></td><td>微信 JSAPI/扫码、支付宝 APP、预存款、充值卡</td></tr>
<tr><td>后台管理</td><td><span class="badge badge--success">✅ 完整</span></td><td>80+ 管理模块:站点/会员/商品/店铺/交易/营销/统计/跑腿/上门服务</td></tr>
</tbody>
</table>
<h3>核心亮点</h3>
<p><strong>双模式配送</strong>:同时支持自动派单和骑手抢单,可根据运营需求灵活切换</p>
<p><strong>多业务线</strong>:外卖 + 跑腿 + 家政,可扩展为综合本地生活平台</p>
<p><strong>城市级管理</strong>:支持多城市运营,每个城市独立后台管理</p>
<p><strong>部署简单</strong>:宝塔面板一键部署,降低运维门槛</p>
</div>
<!-- ==================== 叮点跑腿 ddrun ==================== -->
<div class="section" id="ddrun">
<div class="section-title">叮点跑腿 ddrun <small>gitee.com/landalfyao/ddrun · ⭐ 1,211</small></div>
<div class="info-card">
<div class="label">项目简介</div>
<div class="value">专注跑腿场景的完整系统,后端采用 Midway 3.0Node.js),管理后台基于 Nuxt 2.x,小程序端使用 UniApp。核心功能涵盖帮送、帮买、骑手抢单、智能分配、提现等。</div>
</div>
<h3>技术方案</h3>
<table>
<thead><tr><th>层级</th><th>技术栈</th></tr></thead>
<tbody>
<tr><td>前端(小程序)</td><td>UniAppVue 50.2% + TypeScript 40.4% + JavaScript 7.9%</td></tr>
<tr><td>后端</td><td>Midway 3.0Node.js 框架,企业级 IoC/DI</td></tr>
<tr><td>管理后台</td><td>Nuxt 2.xVue SSR</td></tr>
<tr><td>数据库</td><td>MySQL</td></tr>
<tr><td>Node 版本</td><td>Node.js 16.x</td></tr>
</tbody>
</table>
<h3>前端(小程序端)功能完成度</h3>
<table>
<thead><tr><th>功能模块</th><th>完成度</th><th>说明</th></tr></thead>
<tbody>
<tr><td>用户下单</td><td><span class="badge badge--success">✅ 完整</span></td><td>发布跑腿任务(帮送/帮买/帮取),填写地址、物品、时间要求</td></tr>
<tr><td>配送方式选择</td><td><span class="badge badge--success">✅ 完整</span></td><td>帮送、帮买、帮取三大服务类型,优惠券/积分抵扣/小费</td></tr>
<tr><td>骑手抢单界面</td><td><span class="badge badge--warning">⚠️ 部分</span></td><td>骑手端任务大厅,按距离排序展示空闲订单,先到先得,无并发锁保护</td></tr>
<tr><td>订单状态追踪</td><td><span class="badge badge--warning">⚠️ 部分</span></td><td>完整状态时间线(创建/支付/接单/送完/完成),但无实时 GPS 地图追踪</td></tr>
<tr><td>实时通知</td><td><span class="badge badge--warning">⚠️ 部分</span></td><td>依赖微信订阅消息推送,无 WebSocket 实时推送</td></tr>
<tr><td>商户管理界面</td><td><span class="badge badge--error">❌ 无</span></td><td>纯 C2C 跑腿模式,无商户模块</td></tr>
</tbody>
</table>
<h3>后端功能完成度</h3>
<table>
<thead><tr><th>功能模块</th><th>完成度</th><th>说明</th></tr></thead>
<tbody>
<tr><td>订单管理</td><td><span class="badge badge--success">✅ 完整</span></td><td>30+ 字段全生命周期,状态机:-2取消/-1关闭/0未付/1已付待接/2接单配送/3已送达/4完成</td></tr>
<tr><td>配送方式配置</td><td><span class="badge badge--success">✅ 完整</span></td><td>阶梯计价:起步价 + 距离阶梯 + 重量阶梯 + 时段加价,腾讯地图 API 计算距离</td></tr>
<tr><td>骑手抢单引擎</td><td><span class="badge badge--warning">⚠️ 部分</span></td><td>广播池模型:所有骑手可见(status=1 且 riderNo=null),按距离排序,先到先得。无分布式锁,无智能派单算法</td></tr>
<tr><td>骑手管理</td><td><span class="badge badge--success">✅ 完整</span></td><td>注册→审核→启停接单→收入统计→银行卡→提现,Nuxt 管理后台 CRUD</td></tr>
<tr><td>支付与提现</td><td><span class="badge badge--warning">⚠️ 部分</span></td><td>微信支付完整实现(统一下单+回调+退款),支付宝/QQ 仅枚举未实现</td></tr>
<tr><td>定时任务</td><td><span class="badge badge--success">✅ 完整</span></td><td>三个延迟队列:15分钟未付自动关闭 / 2小时未接单自动取消 / 2小时送达后自动完成</td></tr>
<tr><td>后台管理</td><td><span class="badge badge--success">✅ 完整</span></td><td>Nuxt2 + Ant Design Vue:城市/计价/订单/骑手/优惠券/配置/资金走势全覆盖</td></tr>
</tbody>
</table>
<h3>核心亮点</h3>
<p><strong>Node.js 高性能后端</strong>Midway 3.0 + TypeScript + TypeORM,架构清晰,代码质量高</p>
<p><strong>智能阶梯计价</strong>:起步价 + 距离/重量/时段多维计价,腾讯地图 API 自动算距</p>
<p><strong>完整的资金流转</strong>:平台/代理/骑手收入自动分账,可配置比例</p>
<p><strong>局限性</strong>:纯跑腿模式无商户端;抢单无并发锁;无实时 GPS 追踪</p>
</div>
<!-- ==================== 万岳外卖系统 ==================== -->
<div class="section" id="wanyue">
<div class="section-title">万岳外卖系统 <small>gitee.com/WanYueKeJi/wanyue_waimai_uniapp · ⭐ 815</small></div>
<div class="info-card">
<div class="label">项目简介</div>
<div class="value">最完整的同城外卖开源系统,包含用户端、商家端、配送端(骑手)、总管理后台、城市配送后台五大端口。PHP ThinkCMF + PhalApi 架构,WebSocket 长连接,队列管理。</div>
</div>
<h3>技术方案</h3>
<table>
<thead><tr><th>层级</th><th>技术栈</th></tr></thead>
<tbody>
<tr><td>前端(小程序)</td><td>UniAppVue 60.5% + JavaScript 33.4%</td></tr>
<tr><td>后端</td><td>ThinkCMF(内容管理框架)+ PhalApiAPI 框架)</td></tr>
<tr><td>数据库</td><td>MySQL</td></tr>
<tr><td>实时通信</td><td>WebSocket 长连接 + PHPExcel 数据导出</td></tr>
<tr><td>异步处理</td><td>队列管理(Queue</td></tr>
</tbody>
</table>
<h3>前端(小程序端)功能完成度</h3>
<table>
<thead><tr><th>功能模块</th><th>完成度</th><th>说明</th></tr></thead>
<tbody>
<tr><td>用户下单</td><td><span class="badge badge--success">✅ 完整</span></td><td>在线点餐、购物车、下单支付,支持连锁餐饮、闪送跑腿</td></tr>
<tr><td>配送方式选择</td><td><span class="badge badge--success">✅ 完整</span></td><td>外卖配送、到店自取、预约配送、扫码点餐、闪送</td></tr>
<tr><td>骑手抢单界面</td><td><span class="badge badge--success">✅ 完整</span></td><td>Graborders 抢单组件、Transferorder 转单、cancleorder 取消,任务地图展示</td></tr>
<tr><td>订单状态追踪</td><td><span class="badge badge--success">✅ 完整</span></td><td>Missionmap 任务地图 + detailmap 配送地图,实时状态更新</td></tr>
<tr><td>实时通知</td><td><span class="badge badge--success">✅ 完整</span></td><td>WebSocket 实时推送新订单(后端 Swoole 实现)</td></tr>
<tr><td>商户管理界面</td><td><span class="badge badge--success">✅ 完整</span></td><td>商家端独立页面:商品/订单/评论/利润/核销/优惠券/营业时间/规格管理</td></tr>
</tbody>
</table>
<h3>后端功能完成度</h3>
<p><em>⚠️ 注意:此仓库仅包含前端代码,后端在独立仓库 <code>wanyue_waimai_web</code>ThinkCMF + PHP + Swoole)。</em></p>
<table>
<thead><tr><th>功能模块</th><th>完成度</th><th>说明</th></tr></thead>
<tbody>
<tr><td>订单管理</td><td><span class="badge badge--success">✅ 完整</span></td><td>完整订单生命周期,含排队叫号、预约调度、退款处理</td></tr>
<tr><td>配送方式配置</td><td><span class="badge badge--success">✅ 完整</span></td><td>配送费、配送范围、配送方式后台灵活配置</td></tr>
<tr><td>骑手抢单引擎</td><td><span class="badge badge--success">✅ 完整</span></td><td>接单池抢单 + 系统智能派单 + 转单功能</td></tr>
<tr><td>多商户管理</td><td><span class="badge badge--success">✅ 完整</span></td><td>多商户入驻、连锁餐饮支持、店铺审核</td></tr>
<tr><td>骑手管理</td><td><span class="badge badge--success">✅ 完整</span></td><td>骑手管理、配送结算、投诉处理、收入统计、提现</td></tr>
<tr><td>支付集成</td><td><span class="badge badge--success">✅ 完整</span></td><td>微信支付 + 支付宝</td></tr>
<tr><td>后台管理</td><td><span class="badge badge--success">✅ 完整</span></td><td>总管理后台 + 城市配送后台,五端全覆盖</td></tr>
</tbody>
</table>
<h3>核心亮点</h3>
<p><strong>五端完整</strong>:用户端 + 商家端 + 骑手端 + 总后台 + 城市配送,业界最完整的开源外卖方案</p>
<p><strong>双模式配送</strong>:接单池抢单 + 智能派单并存,支持转单</p>
<p><strong>WebSocket 实时性</strong>:骑手端实时收到新订单推送</p>
<p><strong>队列管理</strong>:异步处理订单,提高并发能力</p>
<p><strong>连锁餐饮</strong>:支持多门店连锁运营</p>
</div>
<!-- ==================== 暹罗外卖 ==================== -->
<div class="section" id="siam">
<div class="section-title">暹罗外卖 <small>gitee.com/siam1026/siam-cloud · ⭐ 479</small></div>
<div class="info-card">
<div class="label">项目简介</div>
<div class="value">基于 Spring Cloud 微服务架构的多商户外卖配送系统,对标美团/饿了么。包含用户端小程序、商家管理后台、超管调度后台。v1.1 版本,2023 年 12 月开源。</div>
</div>
<div class="info-card" style="border-left: 4px solid var(--color-error);">
<div class="label">⚠️ 重要发现</div>
<div class="value">
<p><strong>骑手抢单功能在开源版中为空实现。</strong> 代码注释明确写着"目前商家自配送,配送费打到商家余额中",骑手配送分支为空。骑手端小程序代码未开源(需加 QQ 群获取)。骑手服务仅有 CRUD 和登录,无在线状态、无地理位置、无订单分配、无收入钱包。</p>
</div>
</div>
<h3>技术方案</h3>
<table>
<thead><tr><th>层级</th><th>技术栈</th></tr></thead>
<tbody>
<tr><td>前端(小程序)</td><td>原生微信小程序(wxapplet-siam-user</td></tr>
<tr><td>管理后台</td><td>Vue 2.5 + Element UIvue-siam-admin + vue-siam-shop</td></tr>
<tr><td>后端</td><td>Spring Cloud Hoxton + Spring Cloud Alibaba + Spring Boot 2.2.213 个微服务)</td></tr>
<tr><td>中间件</td><td>Redis + Redisson + RocketMQ(延迟队列/事务消息)+ RabbitMQ</td></tr>
<tr><td>可观测性</td><td>Sentinel + Seata + SkyWalking + Prometheus + Grafana + ELK</td></tr>
<tr><td>数据库</td><td>MySQL + MyBatis-Plus 3.1.2</td></tr>
<tr><td>实时通信</td><td>WebSocket</td></tr>
</tbody>
</table>
<h3>前端(小程序端)功能完成度</h3>
<table>
<thead><tr><th>功能模块</th><th>完成度</th><th>说明</th></tr></thead>
<tbody>
<tr><td>用户下单</td><td><span class="badge badge--success">✅ 完整</span></td><td>商品浏览、多规格 SKU、购物车、下单支付,完整价格计算</td></tr>
<tr><td>配送方式选择</td><td><span class="badge badge--warning">⚠️ 部分</span></td><td>仅支持自取和配送两种,deliveryWay 始终为 1(商家自配送),平台骑手配送未实现</td></tr>
<tr><td>骑手抢单界面</td><td><span class="badge badge--error">❌ 未开源</span></td><td>README 提及 uniapp-siam-rider 但代码不在仓库中,需加 QQ 群获取</td></tr>
<tr><td>订单状态追踪</td><td><span class="badge badge--warning">⚠️ 部分</span></td><td>订单状态机完整(11 种状态),但无配送轨迹追踪(无骑手位置节点)</td></tr>
<tr><td>实时通知</td><td><span class="badge badge--success">✅ 完整</span></td><td>WebSocket 通知商家新订单、支付成功等</td></tr>
<tr><td>商户管理界面</td><td><span class="badge badge--success">✅ 完整</span></td><td>商家后台(vue-siam-shop):订单/商品/门店/促销/账单/提现全覆盖</td></tr>
</tbody>
</table>
<h3>后端功能完成度</h3>
<table>
<thead><tr><th>功能模块</th><th>完成度</th><th>说明</th></tr></thead>
<tbody>
<tr><td>订单管理</td><td><span class="badge badge--success">✅ 完整</span></td><td>完整下单逻辑:购物车校验→价格计算→订单号生成→支付截止→状态初始化</td></tr>
<tr><td>支付</td><td><span class="badge badge--success">✅ 完整</span></td><td>微信支付集成,支付回调→状态流转→资金冻结→WebSocket 通知</td></tr>
<tr><td>商家接单</td><td><span class="badge badge--success">✅ 完整</span></td><td>商家接单后自取订单转待处理、外卖订单转待配送,WebSocket 推送</td></tr>
<tr><td>配送方式配置</td><td><span class="badge badge--warning">⚠️ 部分</span></td><td>仅支持商家自配送,平台骑手配送分支为空(handleRiderIncome 注释确认)</td></tr>
<tr><td>骑手抢单引擎</td><td><span class="badge badge--error">❌ 缺失</span></td><td>骑手表仅 5 字段(id/shopId/realname/phone/sex),无在线状态/地理位置/钱包,无抢单/派单 API</td></tr>
<tr><td>多商户管理</td><td><span class="badge badge--success">✅ 完整</span></td><td>商户入驻审核、门店管理、商品管理、订单管理、账单/提现管理</td></tr>
<tr><td>骑手管理</td><td><span class="badge badge--warning">⚠️ 基础</span></td><td>仅有骑手 CRUD 和登录,无审核/等级/排班/收入明细</td></tr>
<tr><td>后台管理</td><td><span class="badge badge--success">✅ 完整</span></td><td>超管后台:会员管理 + 系统设置 + 全模块管理</td></tr>
</tbody>
</table>
<h3>核心亮点</h3>
<p><strong>企业级微服务架构</strong>13 个微服务模块,Spring Cloud Alibaba 全家桶(Eureka/Zuul/Sentinel/Seata</p>
<p><strong>订单管理成熟</strong>:完整下单/支付/退款流程,11 种订单状态机,退款审批流完善</p>
<p><strong>营销功能丰富</strong>:优惠券、满减规则、邀请返现、积分商城</p>
<p><strong>核心缺陷</strong>:骑手抢单配送为空实现,仅支持商家自配送;骑手端小程序未开源</p>
</div>
<!-- ==================== MiniRun 校园跑腿 ==================== -->
<div class="section" id="minirun">
<div class="section-title">MiniRun 校园跑腿 <small>github.com/dearancelan/MiniRun · ⭐ 174</small></div>
<div class="info-card">
<div class="label">项目简介</div>
<div class="value">面向校园场景的跑腿小程序,基于微信云开发(Serverless),无需独立后端服务器。支持代购食物、快递取送、打印文件等任务发布与接单。适合毕业设计或轻量级项目。</div>
</div>
<h3>技术方案</h3>
<table>
<thead><tr><th>层级</th><th>技术栈</th></tr></thead>
<tbody>
<tr><td>前端</td><td>微信小程序原生框架(JavaScript 100%+ Vant 组件库</td></tr>
<tr><td>后端</td><td>微信云开发(云函数 + 云数据库 + 云存储 + 云定时器)</td></tr>
<tr><td>地图</td><td>腾讯地图 SDK(定位、线路计算)</td></tr>
<tr><td>消息推送</td><td>微信订阅消息</td></tr>
<tr><td>支付</td><td>微信支付(云开发集成)</td></tr>
</tbody>
</table>
<h3>前端(小程序端)功能完成度</h3>
<table>
<thead><tr><th>功能模块</th><th>完成度</th><th>说明</th></tr></thead>
<tbody>
<tr><td>用户下单</td><td><span class="badge badge--success">✅ 完整</span></td><td>任务发布:代购食物、快递取送、打印文件等</td></tr>
<tr><td>配送方式选择</td><td><span class="badge badge--warning">⚠️ 部分</span></td><td>仅任务分类选择,无复杂配送方式配置</td></tr>
<tr><td>骑手抢单界面</td><td><span class="badge badge--warning">⚠️ 部分</span></td><td>任务大厅浏览 + 接单,但非严格意义上的抢单(无并发锁)</td></tr>
<tr><td>订单状态追踪</td><td><span class="badge badge--success">✅ 完整</span></td><td>云数据库实时更新,状态流转清晰</td></tr>
<tr><td>实时通知</td><td><span class="badge badge--warning">⚠️ 部分</span></td><td>微信订阅消息推送,非实时 WebSocket</td></tr>
<tr><td>商户管理界面</td><td><span class="badge badge--error">❌ 无</span></td><td>无商户概念,纯 C2C 任务模式</td></tr>
</tbody>
</table>
<h3>后端(云函数)功能完成度</h3>
<table>
<thead><tr><th>功能模块</th><th>完成度</th><th>说明</th></tr></thead>
<tbody>
<tr><td>任务管理</td><td><span class="badge badge--success">✅ 完整</span></td><td>云函数实现任务 CRUD、分类管理</td></tr>
<tr><td>接单逻辑</td><td><span class="badge badge--warning">⚠️ 部分</span></td><td>基础接单功能,无分布式锁,高并发可能重复接单</td></tr>
<tr><td>用户认证</td><td><span class="badge badge--success">✅ 完整</span></td><td>微信登录,角色管理(用户 vs 跑腿者)</td></tr>
<tr><td>定时器</td><td><span class="badge badge--success">✅ 完整</span></td><td>云定时器处理超时任务、清理过期数据</td></tr>
<tr><td>支付</td><td><span class="badge badge--success">✅ 完整</span></td><td>微信支付云开发集成</td></tr>
<tr><td>局限性</td><td><span class="badge badge--warning">⚠️ 明显</span></td><td>云开发有容量限制,不适合大规模商用;无商户管理</td></tr>
</tbody>
</table>
<h3>核心亮点</h3>
<p><strong>零运维</strong>:基于微信云开发,无需服务器、域名、备案</p>
<p><strong>快速上手</strong>:适合毕业设计、个人学习、校园小范围运营</p>
<p><strong>局限性明显</strong>:非外卖场景(纯跑腿)、无商户管理、并发能力有限、抢单逻辑不够严谨</p>
</div>
<!-- ==================== 综合建议 ==================== -->
<div class="section" id="recommendation">
<div class="section-title">综合建议 <small>选型与二次开发推荐</small></div>
<h3>按场景推荐</h3>
<table>
<thead><tr><th>使用场景</th><th>推荐项目</th><th>理由</th></tr></thead>
<tbody>
<tr>
<td><strong>快速搭建完整外卖平台</strong></td>
<td>万岳外卖系统</td>
<td>五端完整(用户/商家/骑手/总后台/城市后台),开箱即用,PHP 生态成熟</td>
</tr>
<tr>
<td><strong>学习 Spring Cloud 外卖架构</strong></td>
<td>暹罗外卖</td>
<td>微服务架构设计规范,订单/支付/退款流程成熟。但骑手抢单未实现,需自行开发配送模块</td>
</tr>
<tr>
<td><strong>专注跑腿业务(非外卖)</strong></td>
<td>叮点跑腿 ddrun</td>
<td>Node.js 高性能后端,智能计价,分销系统,专注跑腿场景</td>
</tr>
<tr>
<td><strong>轻量级/个人/毕业设计</strong></td>
<td>MiniRun 校园跑腿</td>
<td>零运维成本,云开发 Serverless,快速部署</td>
</tr>
<tr>
<td><strong>综合本地生活平台</strong></td>
<td>DSO2O 外卖</td>
<td>外卖 + 跑腿 + 家政多业务线,宝塔一键部署,社区活跃</td>
</tr>
</tbody>
</table>
<h3>骑手抢单功能对比</h3>
<table>
<thead><tr><th>项目</th><th>抢单模式</th><th>实时通知</th><th>智能派单</th><th>转单</th><th>并发安全</th></tr></thead>
<tbody>
<tr><td>DSO2O</td><td>WebSocket 推送 + 抢单</td><td>GatewayWorker WS</td><td>✅ 自动派单</td><td></td><td>✅ 数据库锁</td></tr>
<tr><td>万岳外卖</td><td>接单池 + Graborders</td><td>WebSocket (Swoole)</td><td>✅ 智能派单</td><td>✅ Transferorder</td><td>✅ 队列 + 锁</td></tr>
<tr><td>暹罗外卖</td><td>❌ 未实现</td><td>WebSocket</td><td></td><td></td><td>❌ 无</td></tr>
<tr><td>叮点跑腿</td><td>广播池(先到先得)</td><td>⚠️ 订阅消息</td><td>❌ 无</td><td></td><td>⚠️ 仅 DB 事务</td></tr>
<tr><td>MiniRun</td><td>任务大厅接单</td><td>订阅消息</td><td></td><td></td><td>❌ 无并发锁</td></tr>
</tbody>
</table>
<h3>最终推荐</h3>
<div class="info-card" style="border-left: 4px solid var(--color-primary);">
<div class="label">🏆 首选推荐</div>
<div class="value">
<p><strong>万岳外卖系统</strong> — 如果目标是快速搭建一个包含骑手抢单功能的完整外卖平台,万岳是最佳选择。五端完整、开箱即用、PHP 生态成熟、部署简单,抢单/派单/转单功能齐全。</p>
</div>
</div>
<div class="info-card" style="border-left: 4px solid var(--color-success);">
<div class="label">🚀 企业级推荐</div>
<div class="value">
<p><strong>暹罗外卖</strong> — 如果团队熟悉 Java/Spring Cloud,需要企业级的高可用架构,暹罗的微服务方案和可观测性体系是最佳参考。但部署和运维门槛较高。</p>
</div>
</div>
<div class="info-card" style="border-left: 4px solid var(--color-warning);">
<div class="label">📋 补充推荐</div>
<div class="value">
<p><strong>DSO2O 外卖</strong> — 如果需要综合本地生活平台(外卖 + 跑腿 + 家政),DSO2O 是最活跃的选择,Star 数最高,支持宝塔一键部署。</p>
</div>
</div>
</div>
</div><!-- end main -->
</div><!-- end layout -->
</div><!-- end container -->
<script>
// Sidebar active state on scroll
const sections = document.querySelectorAll('.section[id]');
const links = document.querySelectorAll('.sidebar a');
function updateActiveLink() {
let current = '';
sections.forEach(section => {
const top = section.offsetTop - 100;
if (window.scrollY >= top) {
current = section.id;
}
});
links.forEach(link => {
link.classList.remove('active');
if (link.getAttribute('href') === '#' + current) {
link.classList.add('active');
}
});
}
window.addEventListener('scroll', updateActiveLink);
updateActiveLink();
// Smooth scroll
links.forEach(link => {
link.addEventListener('click', function(e) {
e.preventDefault();
const target = document.querySelector(this.getAttribute('href'));
if (target) {
target.scrollIntoView({ behavior: 'smooth', block: 'start' });
}
});
});
</script>
</body>
</html>