首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >同城上门家政系统开发实践:多技师派单与服务流程设计

同城上门家政系统开发实践:多技师派单与服务流程设计

原创
作者头像
省钱兄科技
发布于 2026-11-05 17:09:22
发布于 2026-11-05 17:09:22
1300
举报

同城上门家政系统开发实践:多技师派单与服务流程设计

随着本地上门服务业务快速发展,家政预约平台的开发需求持续增长。一套家政系统除了基础的服务浏览、预约下单之外,多技师派单调度、完整的上门服务履约流程是整个系统的核心难点。技师派单负责将工单合理分配给符合条件的服务人员,服务流程定义从下单到验收评价全链路状态流转,共同支撑上门业务闭环。

本文将从系统整体架构、技师信息模块、预约工单生成、多技师派单调度、上门履约流程、地图能力、微信支付、后台统计、技术选型、后期扩展几个维度,讲解同城上门家政系统的开发要点。

一、同城上门家政系统整体架构设计

完整的家政系统分为用户小程序、技师服务端、平台管理后台,部分业务场景支持家政企业商户端,四端共享同一套API服务层,保证工单状态数据实时同步。

1. 用户端小程序

面向消费用户,主要能力:

  • 家政服务分类浏览、服务详情查看
  • 上门地址管理、预约时间选择、提交预约工单
  • 在线支付、工单进度查询、技师位置跟踪
  • 服务验收、订单评价、售后申请
2. 技师服务端(小程序)

面向保洁、家电维修、洗护等上门服务技师:

  • 查看待派单、待服务工单列表
  • 抢单接收工单、上门签到、更新服务履约状态
  • 上传服务凭证照片、收益明细查询、提现申请
3. 平台管理后台

用于平台统一管控业务:

  • 用户、技师资质审核,技师技能标签维护
  • 服务项目配置、工单全流程监控、异常工单人工干预改派
  • 财务结算、佣金配置、业务数据统计

整体架构示意:

代码语言:javascript
复制
 用户小程序
 |
技师端 ---- API服务层 ---- 平台管理后台
 |
数据库(MySQL + Redis)

二、技师与服务项目模块设计

技师是家政平台的核心资源,除基础账号信息外,还需要存储技能标签、服务半径、评分、排班档期等派单依赖数据。

技师信息数据表:

代码语言:javascript
复制
CREATE TABLE technician (
 id INT PRIMARY KEY AUTO_INCREMENT,
 name VARCHAR(50) COMMENT '技师姓名',
 phone VARCHAR(20) COMMENT '联系电话',
 avatar VARCHAR(255) COMMENT '头像',
 skill_tags VARCHAR(200) COMMENT '技能标签,逗号分隔',
 service_radius INT COMMENT '可服务半径(公里)',
 lat DECIMAL(10,6) COMMENT '当前位置纬度',
 lng DECIMAL(10,6) COMMENT '当前位置经度',
 avg_score DECIMAL(3,2) COMMENT '平均服务评分',
 status TINYINT DEFAULT 0 COMMENT '0待审核 1正常接单 2禁用',
 is_online TINYINT DEFAULT 0 COMMENT '0离线 1在线接单',
 create_time DATETIME
);

服务项目查询接口(Node.js):

代码语言:javascript
复制
router.get('/service/list', async(req,res)=>{
    const serviceList = await ServiceItem.findAll({
        where:{
            status:1
        }
    })
    res.json({
        code:200,
        data:serviceList
    })
})

三、预约下单与工单生成功能

用户选择服务项目,填写上门地址、预约服务时间、业务备注,系统计算服务金额,生成家政工单。

工单金额计算函数:

代码语言:javascript
复制
function calculateWorkOrderAmount(serviceItem, params){
    let total = serviceItem.price;
    // 加急费、夜间服务费附加计算
    if(params.is_urgent){
        total += params.urgent_fee;
    }
    return total;
}

创建预约工单逻辑:

代码语言:javascript
复制
async function createWorkOrder(userId,serviceItem,params){
    const amount = calculateWorkOrderAmount(serviceItem,params);
    const workOrder = await WorkOrder.create({
        user_id:userId,
        service_id:serviceItem.id,
        appoint_time:params.appointTime,
        address:params.address,
        remark:params.remark,
        user_lat:params.userLat,
        user_lng:params.userLng,
        amount:amount,
        status:'待支付'
    })
    return workOrder;
}

家政工单完整状态流转:

代码语言:javascript
复制
待支付
 |
已支付
 |
待派单
 |
技师已接单
 |
技师出发上门
 |
上门签到
 |
服务进行中
 |
待用户验收
 |
已完成

四、多技师派单调度核心模块实现

派单支持自动加权派单、技师抢单两种模式,平台后台可自由切换。派单前置过滤条件:技师审核通过、在线接单、技能标签匹配、预约档期空闲、在服务半径范围内。过滤完成后综合距离、服务评分、当前在手工单负载做加权匹配;自动派单无人承接时,工单自动进入抢单池,也支持后台人工改派兜底。

工单调度状态常量:

代码语言:javascript
复制
const dispatchStatus = {
    WAIT_DISPATCH:1,    //待派单
    AUTO_PUSH:2,        //系统已推送
    GRAB_ORDER_POOL:3,  //抢单池中
    TECH_ACCEPT:4,      //技师已接单
    ON_THE_WAY:5,       //正在前往
    ARRIVED:6,          //已上门签到
    SERVICING:7,        //服务进行中
    WAIT_CHECK:8,      //待用户验收
    FINISH:9            //订单完成
}

技师抢单接口示例:

代码语言:javascript
复制
router.post('/technician/grabOrder',async(req,res)=>{
    let orderId = req.body.orderId;
    let techId = req.body.techId;
    const orderInfo = await WorkOrder.findByPk(orderId);
    if(orderInfo.dispatch_status !== dispatchStatus.GRAB_ORDER_POOL){
        return res.json({code:500,message:"该工单不可抢单"})
    }
    await WorkOrder.update({
        technician_id:techId,
        dispatch_status:dispatchStatus.TECH_ACCEPT
    },{
        where:{id:orderId}
    })
    res.json({message:"抢单接单成功"})
})

简易自动派单筛选逻辑:

代码语言:javascript
复制
// 简化版自动派单,筛选周边符合条件技师
async function autoDispatch(workOrder){
    //从Redis获取用户地址周边在线、技能匹配技师列表
    const techList = await getNearAvailableTechnician(workOrder.user_lat,workOrder.user_lng,workOrder.service_id);
    if(techList.length === 0){
        //无匹配技师,转入抢单池
        await WorkOrder.update({dispatch_status:dispatchStatus.GRAB_ORDER_POOL},{where:{id:workOrder.id}});
        return false;
    }
    //业务中可增加加权打分,此处取列表首位技师演示
    const targetTech = techList[0];
    await WorkOrder.update({
        technician_id:targetTech.id,
        dispatch_status:dispatchStatus.TECH_ACCEPT
    },{where:{id:workOrder.id}});
    return true;
}

业务说明:实际项目中,还需要增加档期冲突校验、派单超时重试、人工改派接口,避免工单长时间无人处理。

五、地图LBS上门服务能力

家政上门业务强依赖地图服务,实现如下能力:

  • 用户上门地址解析,转换经纬度坐标
  • 基于经纬度筛选周边符合条件的技师
  • 技师实时位置上报存入Redis
  • 技师位置展示、上门路线规划

路线调用接口示例:

代码语言:javascript
复制
function getServiceRoute(start,end){
    return axios.get(
        "[https://api.map.com/direction](https://api.map.com/direction)",
        {
            params:{
                origin:start,
                destination:end
            }
        }
    )
}

六、微信支付订单处理

用户提交预约工单之后,需要完成线上支付,支付完成工单进入待派单调度池。

支付业务流程:

代码语言:javascript
复制
用户提交预约工单
↓
生成业务工单记录
↓
调用微信支付接口
↓
用户完成小程序支付
↓
接收微信异步回调
↓
更新工单状态为待派单,触发派单任务

支付回调示例代码:

代码语言:javascript
复制
router.post('/pay/notify', async(req,res)=>{
    let orderId=req.body.orderId;
    await WorkOrder.update({
        status:"待派单"
    },{
        where:{
            id:orderId
        }
    });
    res.send("success");
})

七、后台数据统计功能

平台运营需要统计工单数量、技师绩效、平台营收佣金等业务指标。

统计每日工单数量SQL:

代码语言:javascript
复制
SELECT 
DATE(create_time) AS day, COUNT(*) AS order_count
FROM work_order
GROUP BY day;

统计平台已完成工单总营收:

代码语言:javascript
复制
SELECT 
SUM(amount) AS total_income
FROM work_order
WHERE dispatch_status=9;

技师维度服务统计:

代码语言:javascript
复制
SELECT technician_id,COUNT(id) AS service_num,AVG(score) AS avg_score
FROM work_order
WHERE dispatch_status=9
GROUP BY technician_id;

通过统计数据,可以帮助运营人员掌握预约工单走势、技师服务质量、平台营收情况。

八、家政小程序开发技术选型

小程序端
  • 微信小程序原生开发
  • UniApp
  • Taro
后端
  • Java Spring Boot
  • Node.js
  • PHP Laravel
数据库 & 缓存
  • MySQL:存储用户、技师、工单、服务项目业务数据
  • Redis:存储技师地理位置GEO数据、在线状态缓存
服务部署
  • Linux服务器
  • Nginx
  • Docker

SpringBoot项目目录参考:

代码语言:javascript
复制
housekeeping‑system

├── user            用户模块
├── service         家政服务项目模块
├── technician      技师人员管理模块
├── workorder       预约工单核心模块
├── dispatch        多技师派单调度模块
├── payment         支付模块
└── admin           平台后台

按照业务模块拆分代码,便于后续迭代扩展。

九、后期扩展方向

基础预约与派单调度搭建完成后,还可以根据业务场景拓展更多能力。

会员营销
  • 会员等级、优惠券
  • 服务次卡、套餐包售卖
  • 积分抵扣服务费用
企业与商家入驻模式
  • 家政公司入驻申请、资质审核
  • 平台佣金配置、企业批量结算
调度增强
  • 加权智能派单算法(距离、评分、负载、技能多维度)
  • 工单拒单、转单、改派完整逻辑
  • 派单日志,排查调度异常问题
数据运营
  • 用户预约行为分析
  • 技师服务质量、履约率统计
  • 售后工单问题统计

总结

同城上门家政系统,不仅仅是简单的预约下单工具,核心在于多技师派单调度和完整的上门履约服务流程。

开发过程除基础CRUD接口之外,需要重点处理技师过滤匹配、派单兜底降级、工单状态机流转、上门签到等业务边界场景。通过合理设计数据表结构,借助Redis处理地理位置检索,可以搭建稳定的上门预约平台。基于系统可扩展特性,还可以叠加次卡套餐、企业预约、商家入驻等功能,适配多样化的本地上门服务业务需求。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 同城上门家政系统开发实践:多技师派单与服务流程设计
    • 一、同城上门家政系统整体架构设计
    • 二、技师与服务项目模块设计
    • 三、预约下单与工单生成功能
    • 四、多技师派单调度核心模块实现
    • 五、地图LBS上门服务能力
    • 六、微信支付订单处理
    • 七、后台数据统计功能
    • 八、家政小程序开发技术选型
    • 九、后期扩展方向
    • 总结
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档