随着上门家政服务的市场需求持续上涨,不少家政服务商、创业团队希望搭建自有线上预约平台。自建家政小程序可以拥有更高的业务自主权,能够按需调整业务逻辑,实现用户端、服务师傅端、平台管理后台一体化业务闭环。
本文将从系统架构、核心功能、关键代码实现等方面,介绍如何搭建一套同城家政上门预约小程序。

完整的家政预约小程序主要分为三大业务终端:用户端小程序、师傅服务端、平台管理后台。部分场景下可增加家政商家管理端,用于入驻家政企业管理旗下服务人员。
面向普通消费者,主要提供能力:
面向家政保洁、维修、月嫂等上门服务人员:
用于平台整体业务管控:
整体架构示意:
用户小程序
|
师傅端 ---- API服务层 ---- 平台管理后台
|
数据库用户打开小程序首页展示各类家政服务,包含保洁、家电清洗、维修养护等项目,展示服务说明、计价方式、参考价格。
服务项目数据表:
CREATE TABLE service_item (
id INT PRIMARY KEY AUTO_INCREMENT,
category_id INT COMMENT '服务分类ID',
name VARCHAR(100) COMMENT '服务名称',
image VARCHAR(255) COMMENT '服务封面图',
price DECIMAL(10,2) COMMENT '基础价格',
unit VARCHAR(20) COMMENT '计价单位:小时/次/㎡',
status TINYINT DEFAULT 1 COMMENT '1上架 0下架'
);服务项目查询接口示例(Node.js)
router.get('/service/list', async(req,res)=>{
const serviceList = await ServiceItem.findAll({
where:{
status:1
}
})
res.json({
code:200,
data:serviceList
})
})接口返回数据后,小程序前端渲染服务列表页面。
用户选择服务项目,填写上门地址、预约时间、备注需求,系统计算服务总金额,生成家政工单。
订单金额计算工具函数:
function calculateOrderAmount(serviceItem,extendParams){
let total = serviceItem.price;
// 处理附加费用:超时费、加急费、面积加价
if(extendParams.urgent === true){
total += extendParams.urgentFee
}
return total;
}创建预约工单逻辑:
async function createWorkOrder(userId,serviceItem,extendParams){
const amount = calculateOrderAmount(serviceItem,extendParams);
const order = await WorkOrder.create({
user_id:userId,
service_id:serviceItem.id,
appoint_time:extendParams.appointTime,
address:extendParams.address,
remark:extendParams.remark,
amount:amount,
status:'待支付'
});
return order;
}家政工单完整状态流转:
待支付
|
已支付
|
待派单
|
师傅已接单
|
师傅出发上门
|
服务进行中
|
待用户验收
|
已完成派单履约是家政系统的核心业务流程,支持平台自动派单、师傅抢单两种调度模式。
工单状态常量定义:
const workOrderStatus={
WAIT_PAY:1,
WAIT_DISPATCH:2,
ACCEPTED:3,
ON_WAY:4,
SERVICING:5,
WAIT_CHECK:6,
FINISH:7
}师傅接单接口示例:
router.post('/worker/acceptOrder',async(req,res)=>{
let orderId=req.body.orderId;
let workerId=req.body.workerId;
await WorkOrder.update({
worker_id:workerId,
status:3
},{
where:{
id:orderId
}
})
res.json({
message:"接单成功"
})
})平台后台可以实时查看每一笔工单的履约进度。
同城上门服务需要依赖地图服务,实现以下能力:
调用地图路线接口示例:
function getServiceRoute(start,end){
return axios.get(
"[https://api.map.com/direction](https://api.map.com/direction)",
{
params:{
origin:start,
destination:end
}
}
)
}用户提交预约工单之后,需要完成线上支付。
支付业务流程:
用户提交预约工单
↓
生成业务工单记录
↓
调用微信支付接口
↓
用户完成支付
↓
接收微信回调,更新工单状态支付回调处理示例:
router.post('/pay/notify', async(req,res)=>{
let orderId=req.body.orderId;
await WorkOrder.update({
status:"待派单"
},{
where:{
id:orderId
}
});
res.send("success");
})平台运营需要统计预约工单、营收、师傅绩效等业务数据。
统计每日工单数量SQL:
SELECT
DATE(create_time) AS day, COUNT(*) AS order_count
FROM work_order
GROUP BY day;统计平台已完成订单交易金额:
SELECT
SUM(amount) AS total_income
FROM work_order
WHERE status=7;通过统计数据,可以帮助运营人员掌握预约量变化、师傅服务绩效、平台营收情况。
Spring Boot项目目录参考:
housekeeping-system
├── user 用户模块
├── service 家政服务类目模块
├── order 预约工单模块
├── worker 师傅人员管理
├── dispatch 派单调度模块
├── payment 支付模块
└── admin 平台后台按照业务模块拆分代码,便于后续迭代扩展。
基础预约系统搭建完成后,还可以结合业务场景拓展更多能力。
同城家政小程序,不只是简单的预约下单工具,需要完整覆盖用户预约、师傅履约、平台管控整套O2O业务流程。
通过合理设计系统架构、数据表结构以及工单状态流转逻辑,就可以快速搭建适配本地市场的上门预约服务平台。基于系统的可扩展特性,可以根据业务发展叠加会员次卡、企业预约、多商家入驻等功能,满足多样化的本地上门服务业务需求。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。