同城家政系统开发搭建详解:上门服务小程序核心功能与技术架构
同城家政小程序的核心诉求是把预约、派单、履约、结算、售后形成完整闭环,兼顾保洁、家电清洗、维修等多品类上门业务。很多项目在搭建时只优先实现下单功能,缺少统一工单状态管控、师傅资质风控、履约凭证留痕,后期容易出现客诉对账困难。本文基于SpringBoot+UniApp前后端分离架构,梳理整套系统的分层架构、三端核心能力、关键业务模块,附带Java代码示例,适合自研搭建、私有化部署参考。
系统整体技术架构与分层设计
前端使用UniApp开发用户小程序、师傅小程序,Vue3+Element Plus搭建运营后台;后端采用SpringBoot+MyBatis-Plus,MySQL存储订单、师傅档案、服务类目、结算流水;Redis承载GEO地理位置检索、档期锁、营销配置缓存;RocketMQ处理工单状态变更、消息通知、定时巡检任务;WebSocket同步三端工单实时状态,对象存储用于保存打卡凭证、资质照片。
整体分层分为接入层、业务服务层、数据层、第三方集成层。接入层统一鉴权、限流、参数校验;业务层拆分为用户服务、服务类目服务、工单调度服务、师傅管理服务、营销结算服务;第三方层对接地图SDK、微信支付、消息推送。
业务主链路:用户浏览服务、选择时段下单支付 → 工单进入调度池,匹配符合条件师傅 → 师傅接单,按预约时间上门打卡履约 → 完工上传凭证、用户验收评价 → 到期自动结算佣金,产生异议时发起售后工单。
三端核心功能梳理
用户端小程序主要包含服务分类展示、LBS附近服务、预约下单、优惠券抵扣、订单跟踪、查看师傅实时位置、完工评价、售后申请、个人中心。支持按时长、面积、报价三种模式下单,适配标准化保洁和非标维修业务。
师傅端小程序包含接单抢单、工单列表、上门打卡、开工完工凭证上传、位置上报、订单进度更新、收入明细、提现申请。同时支持自主开关接单状态、查看排班档期。
运营后台包含服务类目管理、计价模板配置、师傅资质审核、智能派单/人工指派、订单监控、营销活动配置、财务对账、数据报表、售后工单处理。
工单与调度模块:统一工单模型+加权派单
工单主表存储通用字段,品类差异化数据通过扩展子表存放,共用一套状态机流转,状态包含待支付、待派单、已接单、待上门、服务中、待验收、已完成、取消、售后。
调度引擎前置过滤条件:师傅审核通过、接单开关开启、档期无冲突、服务标签匹配、在服务半径内;过滤完成后按距离、好评率、当前负载加权打分,支持自动指派、抢单两种模式,长时间无人接单自动转入人工调度池。
@Service
public class OrderDispatchService {
public DispatchResult filterAndScore(WorkOrderDO order, List<StaffDO> staffList) {
List<StaffScoreDTO> scoreList = new ArrayList<>();
for (StaffDO staff : staffList) {
// 校验技能标签
boolean tagMatch = staff.getTagList().contains(order.getServiceTag());
if (!tagMatch) {
continue;
}
// 校验档期占用
boolean scheduleAvailable = scheduleService.checkSchedule(staff.getId(), order.getAppointTime());
if (!scheduleAvailable) {
continue;
}
double distance = gpsUtil.calcDistance(staff.getLng(), staff.getLat(), order.getUserLng(), order.getUserLat());
double score = (1 - distance / 3.0) * 0.4 + staff.getAvgScore() / 5 * 0.4 + (1 - staff.getLoadRate()) * 0.2;
StaffScoreDTO dto = new StaffScoreDTO();
dto.setStaffId(staff.getId());
dto.setScore(score);
dto.setDistance(distance);
scoreList.add(dto);
}
scoreList.sort((a, b) -> Double.compare(b.getScore(), a.getScore()));
DispatchResult result = new DispatchResult();
result.setCandidateList(scoreList);
return result;
}
}
履约打卡、营销与结算模块
履约打卡采用地理围栏校验,上门签到、完工打卡绑定坐标和现场照片,打卡记录独立落库,作为纠纷仲裁凭证。
营销模块包含优惠券、套餐次卡、会员权益,价格计算统一收口在后端结算服务,避免前端价格和后端不一致。
结算模块绑定类目佣金规则,订单验收后进入冻结周期,窗口期结束自动结算;售后退款时支持佣金逆向冲销,所有结算流水、提现记录完整留存,满足财务对账需求。
搭建部署流程与资源规划
搭建可以分为需求梳理、数据表设计、后端接口开发、三端前端开发、联调测试、灰度上线六个阶段。初期单站点单量不大时,可使用单机部署;后续多站点扩张,再考虑读写分离、MQ集群扩容。
上线前重点测试并发领券、抢单冲突、档期锁、退款冲销几个风险点;同时配置定时任务巡检资质有效期、即将到期套餐、超时未接单工单。

开发搭建高频问题与优化方案
第一,所有品类字段全部堆砌在工单主表,表结构臃肿;方案:主表保存通用字段,差异化信息放入扩展子表;
第二,派单逻辑大量if else硬编码,新增品类需要改代码;方案:标签、权重、计价规则全部后台配置;
第三,打卡只依赖GPS,GPS漂移造成打卡失败;方案:围栏半径可按类目配置,搭配图片凭证辅助核验;
第四,消息推送单一,WebSocket断开收不到通知;方案:小程序订阅消息兜底推送;
第五,结算缺少逆向回滚,售后退款后账目错乱;方案:每一笔佣金变动生成账单记录,支持冲销。

总结
这套同城家政上门小程序方案,以统一工单模型和调度引擎为核心,覆盖用户端、师傅端、运营后台三端,把预约、派单、打卡履约、营销、结算、售后全部闭环。基于SpringBoot+UniApp的技术栈,支持保洁、清洗、维修等多品类上门服务,新增服务类目时主要在后台配置,不需要重构核心调度和工单逻辑。项目搭建落地时,优先保证工单状态机严谨、打卡凭证留痕、结算账目可追溯,在满足业务灵活扩展的同时,降低平台客诉与财务风险,适合本地家政服务商快速搭建属于自己的同城上门服务平台。