简介:上门家政系统本质上是服务交易、人员调度与履约跟踪的三层结构。一套完整的开源解决方案需打通用户端、师傅端与管理后台,并依赖订单状态机处理预约、派单、验收等复杂时序。基于ThinkPHP 6.0+MySQL+Redis的成熟技术栈,系统不仅部署门槛低,还支持前后端分离与灵活二次开发,非常适合中小企业快速搭建本地O2O家政平台。本文从实际部署出发,涵盖环境配置、安装流程、功能拆解及派单算法扩展等工程实践,为自建上门家政系统提供完整参考。 拿到这套 likshop 的上门家政系统开源版源码,我第一时间就装起来跑了一遍。这类系统市面上不少,但真正能把“用户端 + 师傅端 + 管理后台”三端打通,还愿意把源码全部开放出来的,确实不多见。今天这篇就围绕这套开源版的实际部署、功能拆解、运营思路和二次开发要点,完整梳理一遍,给正在选型或者准备自建上门家政平台的你一个参考。
1. 系统整体设计与业务拆解
1.1 家政平台的核心业务逻辑
上门家政不是一个简单的“商品买卖”生意,它本质上是服务交易 + 人员调度 + 履约跟踪的三层结构。用户买的是一个“上门服务”的承诺,平台要解决的核心问题则是:怎么让用户快速下单、平台怎么派单给师傅、师傅怎么接单履约、最后怎么完成结算。likeshop家政版在这套逻辑上的设计做得比较完整。
它和普通电商系统最大的区别在于:商品(服务项目)是虚拟交付的,履约过程高度依赖线下人工。所以系统必须同时处理服务时长、上门地址、预约时间、服务人员指派、验收确认这些电商里不存在的“时序状态”。likeshop把整个订单流转设计成了:待付款 → 待派单 → 待服务 → 服务中/待验收 → 已完成 → 已评价,每一个状态之间都有明确的触发动作,这给后续的运营管理留了非常好的抓手。
1.2 三端架构与技术选型
这套系统的技术栈很有意思,它采用的是经典的ThinkPHP 6.0 + MySQL 5.7 + Redis组合,前后端分离,后端提供 API 接口,前端分三套:用户端(支持公众号/H5/小程序)、师傅端(独立小程序)、管理后台(Vue 2 + Element UI)。整体是 PHP 生态里非常成熟稳健的方案。
选型上,ThinkPHP 在国内开发者群体中有大量现成案例和经验积累,部署要求不高,虚拟主机都能跑(当然实际建议上云服务器),遇到问题检索资料也容易。管理后台用 Vue 做前后端分离,意味着你可以直接替换成 Vue 3 或者改造成 React 项目,灵活性很不错。这种架构的取舍对中小企业或者个人创业者来说非常实际——省钱、稳定、好招人维护,出问题了能找到人兜底。
1.3 开源版与商业版的差异判断
很多人关心开源版是不是“阉割版”,我实测下来觉得可以放心。核心交易链路是完整的:服务项目管理、下单、支付、派单、师傅接单、订单核销、售后申请、评价系统,该有的都有。商业版主要多出来的部分是营销插件(比如分销裂变、邻里拼团这类推广工具)、多门店/多城市管理这类高并发扩展场景,以及官方技术支持和授权服务。
对于单城市起盘的创业团队来说,开源版足够支持你把业务跑起来。我自己部署后的感受是:代码注解清晰,模块化程度高,没有加密文件,没有后门逻辑,这类“拿来就能用”的开源项目在国内 PHP 生态里算真良心了。
2. 核心业务功能模块与运营价值
2.1 用户端:下单路径的转化率设计
用户端的核心不是功能多,而是下单路径短。likeshop 的用户端首页设计是标准的“分类入口 + 推荐服务 + 营销位”结构,用户从打开小程序到创建一个订单,正常只需要 3 步:选服务 → 填地址和时间 → 支付。这个路径是经过大量电商验证过的标准设计。
我重点看了一下服务详情页,它的评价体系不是简单的打分,而是支持图文评价、标签评价(如“准时”、“专业”、“态度好”),这些结构化标签数据会沉淀为服务项目的信任背书,对下单转化率影响很大。另外,服务规格(如按小时收费、按次收费)支持自定义配置,运营人员可以在后台随时调整,不需要发版更新小程序,这是很细致的设计。
2.2 师傅端:接单工具的核心体验
师傅端小程序的使用体验直接决定服务供给端的稳定,likeshop 在这块做得比较顺手。师傅端支持三种接单模式:后台强制派单(平台指派后师傅只能接受)、抢单大厅(师傅自己抢)、后台代派(后台手工指定),这种灵活的派单策略适配不同阶段的运营需求。
师傅端还包含完整的钱包体系:收入明细、提现申请、提现记录一目了然。这个设计很关键,师傅的信任是靠“看得见的钱”累积的,提现流程如果在管理员后台确认后能快速到账,师傅的配合度会高很多。另外,师傅端和服务单关联的地图导航功能也很实用,免去了跳转第三方 App 的环节,师傅用起来省心。
2.3 管理后台:多维度管控与数据呈现
管理后台才是整个系统的中枢神经。它涵盖了会员管理、订单管理、服务项目管理、师傅管理、财务管理、营销中心、内容管理、设置中心等完整模块。
实际看一下订单管理,它支持按订单号、用户手机号、师傅姓名、订单状态、时间范围等多条件组合筛选,对日常运营处理客诉是刚需功能。财务模块包含支付流水、退款记录、提现申请、对账单等,每一笔钱都走系统记录,财务对账时能省大量人工。数据看板方面,首页仪表盘会呈现当日新增用户、新增订单、营收总额、转化率等核心指标,决策层不用折腾报表工具,打开后台即可了解整体经营概况。
3. 部署环境要求与源码获取
3.1 软硬件环境要求说明
在实际部署之前,务必对照一下环境要求,避免装到一半发现 PHP 版本不兼容或者缺少扩展,重新折腾。我这套部署在 2核4G 的云服务器上,标准 Linux 环境,跑起来毫无压力:
| 依赖项 | 推荐配置/版本 | 说明 |
|---|---|---|
| 操作系统 | CentOS 7.9+ / Ubuntu 20.04+ | 生产环境务必用 64 位 Linux |
| PHP | 7.4 - 8.0 | PHP 8.1+ 可能遇到兼容警告,建议用 7.4 最稳 |
| MySQL | 5.7.x | 8.0 也可以,但需注意连接驱动兼容 |
| Redis | 5.x+ | 必须开启,用于缓存和 token 管理 |
| Nginx | 1.18+ | 用于 Web 服务器与反向代理 |
| 服务器配置 | CPU 2核 / 内存 4G / 带宽 3M以上 | 单城市运营足够支撑 |
注意:PHP 需要安装 fileinfo、redis、bcmath、pdo_mysql、openssl、mbstring 等扩展,缺失会导致安装过程中频繁报错。宝塔面板可以在 PHP 扩展管理中一键安装,非常省事。
3.2 获取开源版源码
源码获取是正规渠道,去 Gitee、GitHub 搜索 likeshop 或 likeshop 家政版,即可找到公开仓库。克隆或下载 zip 包即可。源码目录结构大致如下(解压后一目了然):
- server:后端 API 服务端代码(ThinkPHP 6.0 框架)
- admin:管理后台前端(Vue 项目,需要编译)
- user:用户端前端(目前主要是 uni-app 项目,可编译成 H5/小程序)
- smash:师傅端小程序前端(原生小程序或 uni-app 格式,看版本迭代)
- doc:部署文档与接口文档
如果你只是快速体验,直接看 server 目录里是否带 install 安装向导。likeshop 一贯的设计是提供 Web 安装程序,浏览器访问后按步骤填写数据库信息即可自动配置,不需要手动改 .env 文件配数据库连接,这个对新手实在是太友好了。
3.3 源码目录结构与二次开发入口
后端代码按模块划分清晰,application 目录下按业务模块区分(api、admin、common 等),common 里放公共逻辑和服务层。二次开发时主要改两个地方:一是 controller 层接收参数和返回结果,二是 service 层处理业务逻辑。这里命名规范到位,每个方法都有注释,几乎没有“拼代码式堆砌”的坏味道。
前端项目文件结构也很规整,如图片资源放在 static 目录、公共组件在 components 目录、业务页面在 pages 目录下按模块划分。如果你是第一次看这套代码,建议从“创建订单”的业务链路入手:用户端提交订单 → API 层接收 → 订单服务层创建记录 → 生成支付单 → 调起支付 → 回调更新状态 → 后台派单给师傅 → 师傅接单。一条链路走下来,基本上就掌握了整套系统的核心脉络。
4. 从零到一:详细安装部署实操
4.1 准备服务器与基础环境(宝塔面板)
我这次以宝塔面板为例(Linux 面板的最大优势是操作直观,适合不熟悉命令行的读者)。服务器系统选择 CentOS 7.9,安装宝塔面板后,在“软件商店”里安装 Nginx 1.18、MySQL 5.7、PHP 7.4、Redis 5.x。装完后记得在 PHP 设置里安装必要的扩展:
# 在宝塔PHP管理中确认以下扩展已启用 fileinfo、redis、bcmath、pdo_mysql、openssl、mbstring、curl、gd然后给 PHP 调整几个函数禁用项:exec、shell_exec 等函数如果被禁用,有些操作会失败,建议在“禁用函数”里移除这些限制(尤其安装向导需要写文件)。另外还要设置 PHP 的putenv、proc_open函数可用,否则依赖 composer 的组件可能运行异常。
4.2 上传源码并配置站点
源码下载后解压,把 server、admin、user 等目录想办法混到一个站点目录下。如果你打算“后端 + 用户端”用同一个域名跑,参考路径规划:
- 站点根目录:
/www/wwwroot/你的域名 - 后端 API:把 server 目录内容直接放站点根目录,让入口文件
public/index.php对应域名根路径 - 用户端 H5:把 user 目录编译后的 dist 文件放到站点根目录下的
h5子目录 - 管理后台:把 admin 编译后的 dist 文件放到站点根目录下的
admin子目录
说句实话这样混放后续维护会有点乱,我个人更建议后端和前端分开配置子域名:api.你的域名指到后端、admin.你的域名指到管理后台、h5.你的域名指到用户端,各走各的伪静态规则,排查问题时定位会更快。
4.3 配置 Nginx 伪静态与运行目录
后端代码的运行目录必须指向public,否则 ThinkPHP 的入口文件暴露会带来安全隐患。Nginx 的配置核心部分如下:
server { listen 80; server_name api.你的域名; root /www/wwwroot/你的域名/server/public; index index.php index.html; location / { if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=$1 last; } } location ~ \.php(.*)$ { fastcgi_pass unix:/tmp/php-cgi-74.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } # 禁止访问隐藏文件 location ~ /\. { deny all; } }这里的关键是把fastcgi_pass改成你 PHP 版本对应的 socket 路径(宝塔装的每个 PHP 版本 socket 不同,可以用find /tmp -name *.sock查看确认)。配好后访问http://api.你的域名/install应该能看到安装向导。
4.4 安装向导与后台初始化
访问安装向导后,按步骤操作:
- 检查环境:确认目录权限可写(一般给
755或775即可) - 配置数据库:创建数据库和用户,把信息填进去
- 设置管理员账号密码
- 完成安装,系统会自动写入
.env文件并生成数据表
安装完成后,务必删除install目录或重命名为install_bak,防止被恶意重复安装覆盖数据库。然后访问管理后台地址,用刚才设置的管理员账号登录,第一件事是去“系统设置”里把站点名称、客服电话、默认头像等基础信息改掉,再配置支付方式和短信服务商。
4.5 用户端与师傅端小程序打包发布
用户端和师傅端如果是 uni-app 项目,需要安装 HBuilderX(或使用命令行工具)导入项目代码,然后配置小程序 appid 和请求接口地址(在代码中的 config 或 env 文件里修改BASE_URL)。打包步骤:
- 在 HBuilderX 中打开 uni-app 项目
- 修改
/common/config.js(或对应配置文件)里的接口域名 - 点击“运行”调试,确认功能正常
- 点击“发行” → “小程序-微信”,生成微信小程序包
- 用微信开发者工具打开生成的包,上传并提交审核
注意:小程序要求接口域名必须 HTTPS,且已在微信公众平台配置服务器域名白名单。开发测试阶段可以用内网穿透工具,上线前一定要换成正式 HTTPS 域名。
5. 二次开发与系统扩展指南
5.1 新增服务类目与计费规则
上线前最重要的配置项是服务项目管理。比如你要做保洁、家电清洗、保姆月嫂等分类,每个分类下设置具体服务项(如日常保洁、深度保洁、擦玻璃),然后配置计费方式:按次计费、按时长计费、还是按面积计费。
这套系统的服务规格设计得挺灵活,它把规格当成一种“属性组合”,比如“服务时长:2小时/4小时/8小时”对应不同价格,或者“服务人数:1人/2人”。多规格价格设计很关键,因为家政服务价格往往不是单一价格,而是一个价格区间,得当的规格配置直接影响后续订单金额核算和师傅分成比例。
5.2 派单策略与自动调度逻辑
如果你不想用人工派单,可以参考我做的二次开发思路:利用 Redis 做一个简单的自动派单队列。
基本逻辑是:新订单创建且支付完成后,触发一个事件,脚本把订单写入 Redis 队列;然后根据订单地址和师傅的当前定位(师傅端可以上报经纬度),在指定半径内寻找可接单师傅;优先推送给评分高、距离近、订单完成率高的师傅,师傅端收到弹窗,规定时间内没接,自动推给下一位。这里不需要复杂的 GIS 服务,直接用 MySQL 的ST_Distance_Sphere函数或 Haversine 公式一算即可实现,数据量在千级师傅以内完全够用。
// 简单的距离计算函数 function haversineDistance($lat1, $lng1, $lat2, $lng2) { $earthRadius = 6371; // 千米 $dLat = deg2rad($lat2 - $lat1); $dLng = deg2rad($lng2 - $lng1); $a = sin($dLat/2) * sin($dLat/2) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * sin($dLng/2) * sin($dLng/2); $c = 2 * atan2(sqrt($a), sqrt(1-$a)); return $earthRadius * $c; }把这段逻辑封装成服务层方法,在订单支付回调里触发调用,再通过队列异步执行,就能实现基础版自动调度。如果你要更复杂的抢单、指派、转单等策略,也能在这套逻辑上继续扩展。
5.3 营销模块扩展:优惠券与次卡
家政行业复购率是生命线。开源版自带基础的优惠券功能,如果想让用户更“黏”,可以继续扩展次卡/储值卡模块:用户一次性购买“10次保洁套餐”,享受一定折扣,后续预约直接扣减次数。这需要添加一张次卡表、用户次卡关联表,在订单费用计算时优先判断是否有对应次卡可用,核销成功后扣减余额。
这类功能建议优先走“服务层扩展”而不是改控制器,因为订单创建、支付回调、退款这几个环节都要联动判断次卡状态,逻辑集中在 service 层管理会减少很多坑。
5.4 对接外部系统:短信通知与企业微信提醒
为了提升订单响应的及时性,还可以接入短信服务(阿里云/腾讯云)以及企业微信群机器人。订单派单成功、用户付款成功、师傅接单等关键节点触发通知。实现方式:在对应的事件监听器里增加一个通知行为,通过 Guzzle HTTP 客户端调用外部 API 发送消息。由于源码用的是 ThinkPHP 的事件机制,这块改造非常顺手,不需要破坏原有订单流程。
6. 常见问题与排查技巧实录
6.1 安装过程中最常见的 4 个报错
- 报错:
[ERR] 2002 Connection refused:MySQL 没启动,或者数据库地址填错。宝塔上检查 MySQL 是否运行中,确认 socket 连接是否正常。 - 报错:
mkdir(): Permission denied:目录权限不够。到宝塔把这站点目录的权限改为www:www归属,永许读写即可。 - 报错:
Please install the fileinfo extension:PHP 缺少 fileinfo 扩展。在宝塔软件商店的 PHP 扩展管理中一键安装,重启后生效。 - 报错:
Class 'Redis' not found:PHP 没装 Redis 扩展。同上,在 PHP 扩展管理中安装 redis 扩展。
6.2 用户端/管理后台登录无限跳转
这是我部署时踩过的坑。如果后台能打开但登录成功后跳转回登录页,大概率是.env配置里的域名和自己访问的域名不一致,导致回跳地址错误、cookie 无法正确写入。打开.env确认domain配置项填的是当前访问的完整域名(不要带路径),改完清一下浏览器缓存和 cookie 再试。
6.3 支付回调失败,订单状态不更新
支付回调用的是异步通知模式,很多情况是服务器防火墙 / 安全组没放行微信支付/支付宝回调的请求来源,或者回调地址是 http 而被支付平台拒绝。处理步骤:
- 确认服务器安全组放行 80/443 端口
- 卸载宝塔面板的防盗链和 Nginx 防火墙对回调地址的拦截
- 在支付配置中确认回调域名是外网可访问的 HTTPS 地址
- 查看后台日志(
runtime/log/目录下的日志文件)搜索notify关键信息
6.4 定时任务不触发或订单超时未关闭
这套系统的订单超时关闭、师傅接单超时标记等操作依赖队列和定时任务。宝塔环境必须手动配置计划任务:
cd /www/wwwroot/你的域名/server && php think timer start --daemon把这条命令加到宝塔计划任务里,选择“Shell脚本”,执行周期选择“N分钟”(建议 1 分钟),并保证 Redis 服务正常运行。如果你在 Linux 上直接用 crontab,也要注意添加后重启 crond 服务,否则不会生效。
6.5 小程序上传图片失败
小程序端上传图片失败,多是小程序后台没配置“uploadFile 合法域名”,或者接口返回了非标准 JSON。另外检查 PHP 上传限制是否过小,建议在宝塔 PHP 配置里把upload_max_filesize改成 20M,post_max_size改成 50M,重启 PHP 生效。
6.6 优化建议:慢查询与缓存设置
国内服务器带宽一般不会很大,如果用户量上来,记得提前做两件事:第一,MySQL 开启慢查询日志,掌握哪些 SQL 拖慢接口响应;第二,把首页的服务分类、推荐服务列表这类“读多写少”的数据加入 Redis 缓存,有效期设置 5-10 分钟,能明显降低数据库压力。
另外,如果发现某个接口响应异常慢,优先看是不是没有用到索引,尤其是订单表、师傅位置表的查询字段,建立联合索引后提升会很明显。这套系统的表结构设计还算规范,加索引一般不会引起副作用。
7. 部署上线前的上线检查清单
上线前的系统配置和检测项,我整理了一份自检清单,建议逐条过一遍:
| 检查项 | 操作说明 | 状态 |
|---|---|---|
| HTTPS 证书 | 小程序域名必须 HTTPS,免费证书可用 | 未配置/已配置 |
| 服务商接口 | 配置好微信支付/支付宝支付、短信服务 | 未配置/已配置 |
| 定时任务 | 配置好订单超时任务,测试跑通 | 未配置/已配置 |
| 后台基础信息 | 完成站点名称、客服联系方式、服务时间设置 | 未配置/已配置 |
| 服务项目管理 | 设置好分类、服务项、计费规格、图片素材 | 未配置/已配置 |
| 师傅入驻 | 添加测试师傅账号,确认师傅端接单流程 | 未配置/已配置 |
| 数据库备份策略 | 设置每日自动备份到 OSS/本地 | 未配置/已配置 |
| 灰度测试 | 先小范围真实订单走一遍全流程 | 未配置/已配置 |
这条清单每一项都别偷懒。尤其是支付配置和短信,如果等到上线后才发现回调不通,面对的是真实用户抱怨,代价就大了。
8. 我对这套系统的综合评估与总结
likeshop 上门家政系统开源版这套源码,从技术设计、代码质量、功能完整性到部署友好度,在 PHP 开源项目里都属于上乘水准。我自己的体验是:它对中小团队非常友好,一套源码从零起步,能在一个星期内把可用版本部署上线,这在“时间就是金钱”的创业早期是非常大的优势。
它当然不是万能方案。如果你是想做全国性的超级平台、要接入复杂 ERP/财务系统、要支撑几十万日活的流量,这套系统的 PHP 单体架构可能需要较大改造,甚至重写。但如果你是在一个城市深耕,先跑通业务模型,再逐步扩展,它作为起步抓手完全够用。
关于二次开发的方向,我也观察到很多团队在用它的过程中走出了特色路线:有人重点改造了“会员储值 + 家庭档案”模块做长期客户运营,有人接入了电子合同和保险服务提升客单价,还有人打通了本地生活平台做引流。这说明系统底子好、扩展面广,能支撑不同业务形态的演化。
说白了,工具再好,真正决定业务成败的还是运营。这套系统给了你一个扎实的数字化底座,能不能把服务口碑做起来,把师傅团队管好,把用户留存做上去,就要靠你在线下花真功夫了。希望这篇文章能帮你少走一些弯路,快速把平台跑起来。
本文还有配套的精品资源,点击获取