CUSTOM DEVELOPMENT PROPOSAL
上门服务平台
定制改进开发设计方案
基于当前项目源码审查,对预约、技师入驻证照与城市选择、在线履约、定位打卡、转单调度、退款扣费、隐私通信、分润、渠道推广及多城市运营进行整体升级设计。
01方案结论
当前系统已经具备上门服务的基本交易闭环,包括预约入口、技师排班、订单状态、短信验证码、业务短信、服务录音上传、分销结算和城市定位。客户本轮补充了技师入驻证照与开通城市选择、在线排序、履约提醒、到达拍照定位、离场监测、技师转单、虚拟技师调度、退款扣费审核和渠道推广等要求,必须同步调整数据库、状态机、定位授权、异步通知、支付退款、结算快照和后台管理。
02当前代码审查结果
| 需求项 | 当前状态 | 源码现状 | 改造判断 |
|---|---|---|---|
| 1. 预约时间 | 部分具备 | 前端展示未来 5 天整点时段,并禁用今天已经过去的整点;订单仅保存“今天 9/16 22:00”一类文案。 | 需改为标准时间字段,增加默认“当前时间 + 30 分钟”、可配置步长、后端校验和占用冲突检查。 |
| 2. 评价虚拟头像 | 需补齐 | 评价提交时会把用户真实头像固化到评价记录,技师主页直接展示该头像;匿名评价才清空头像。 | 需要统一虚拟头像策略,前台不再返回真实头像,后台仍保留可追溯关系。 |
| 3. 入驻资料真实性 | 部分具备 | 系统已有登录/换绑短信验证码;技师入驻联系电话直接入库,证件区只有身份证正反面与全身照,所在城市为任意文本输入。 | 增加入驻手机号认证、技师证、健康证、营业执照;所在城市改为后台已开通城市选择,并由服务端校验。 |
| 4. 虚拟号与通知 | 需新建 | 已有新订单短信通知;已有“服务录音手工上传”,没有虚拟号绑定、通话回调、自动录音及语音电话通知。 | 接入上海云信前需确认产品权限;新增供应商适配层、回调、录音归档和后台审计。 |
| 5. 首单/加钟提成 | 需新建 | 当前仅有全局平台抽成比例,订单按一个总金额结算;没有加钟商品、加钟支付、次数、分段提成或分段结算快照。 | 新增加钟子单/明细,按基础服务、首次加钟、第二次及以后分别配置技师实收比例。 |
| 6. 退款审核与扣费 | 仅有取消 | 用户和后台可直接取消订单;已付余额会全额退回,微信/支付宝订单没有退款申请、人工审核、部分退款、扣费明细和退款回调闭环。 | 新增全额退款、扣车费、扣误工费、组合扣费和拒绝退款;余额与微信等支付按原渠道退款并保留完整审计。 |
| 7. 技师在线状态 | 部分具备 | 已有接单开关和排班数据,但客户列表缺少统一在线判定、稳定排序和禁用按钮状态。 | 建立在线状态口径;在线优先、离线置底;预约按钮按状态显示绿色可用或灰色禁用。 |
| 8. 履约定位与提醒 | 需新建 | 订单状态可流转,但缺少到达定位、服务前拍照、结束前提醒、完成后离场监测及围栏事件。 | 新增定位打卡、照片凭证、5 分钟提醒、完成 3 分钟未离场告警和最小化定位留存。 |
| 9. 转单与虚拟技师 | 需新建 | 当前订单与接单技师直接绑定,没有技师发起转单、运营调度池或虚拟供给席位。 | 增加转单审批/确认链路;虚拟技师仅作为公开标识的调度席位,订单必须转给实名审核技师履约。 |
| 10. 渠道推广 | 底座可复用 | 现有分销台账可复用,但没有面向公众号、酒店和娱乐场所的独立渠道档案、专属链接、二维码和订单分佣规则。 | 新增渠道链接/码、点击与下单归因、可配置分佣比例、结算对账和退款冲正;不包含代理功能。 |
| 11. 多城市 | 仅有入口 | 首页可定位、选择并缓存城市,技师也有城市字段;但首页、服务和技师查询没有按城市过滤,后台没有城市级数据权限。 | 新增城市主数据及业务关联,支持单城市模式平滑升级到多城市。 |
现有技术基础
后端
Go + Gin + GORM + MySQL,JWT 鉴权,WebSocket 订单状态推送,已有微信/支付宝支付及短信宝通道。
运营后台
Vue 3 + Arco Design,具备用户、技师、订单、审核、短信、通知、分润、分销等配置页面。
移动端
uni-app Vue,覆盖用户、技师和分销工作台,具备定位、地址、订单、评价、排班与身份申请。
03预约时间自动识别与 30 分钟预留
进入确认订单页时,系统自动计算最早可上门时间,并默认选中。客户仍可点击“上门时间”进入选择器,改选技师可服务且未被占用的其他时段。
建议交互规则
- 默认最早时间 = 服务器当前时间 + 准备缓冲,默认 30 分钟。
- 时间步长默认 30 分钟;最早时间向上取整到 10 分钟,避免出现不可读的分钟数。
- 可选结果同时受技师接单开关、工作日、排班时段、已有订单、服务时长和路程缓冲限制。
- 提交订单时由后端再次校验,防止两个客户同时抢占同一时间。
- 后台可配置提前量、时间步长、最长可预约天数和跨午夜规则。
技术改造
| 层级 | 改造内容 | 关键结果 |
|---|---|---|
| 数据库 | 新增 appoint_at 标准日期时间、预计结束时间、时区;旧 appoint_time 仅作为历史展示兼容。 | 可排序、可计算、可防撞单。 |
| 后端 | 提供可用时段接口;创建/支付/改约时校验提前量、排班和订单重叠;冲突时返回最新可选时段。 | 不依赖用户手机时间,避免过期和重复预约。 |
| 用户端 | 自动带出“尽快上门”,支持点击选择日期和时段,明确显示不可选原因。 | 减少一次必选操作,同时保留客户自主选择。 |
| 后台 | 新增预约规则:默认提前 30 分钟、步长 30 分钟、可预约天数、订单间隔。 | 规则可运营调整,无需改代码。 |
04用户评价使用虚拟头像
前台隐私展示
建立 12-24 个平台虚拟头像素材池。评价展示头像由“评价 ID + 用户 ID”稳定映射,同一条评价不会每次刷新变换,也不会暴露微信头像或用户上传头像。
身份与审计
昵称继续脱敏为“张** / 匿名用户”等形式。用户端、技师端接口只返回虚拟头像;运营后台在有权限时仍可通过订单追溯真实用户,用于投诉和风控处理。
- 历史评价批量按同一规则生成虚拟头像,不必逐条人工修改。
- 匿名评价使用统一匿名头像;非匿名评价使用稳定随机头像。
- 头像池可由客户提供品牌素材,也可先使用项目统一的中性人物插画。
- 数据库可保存 virtual_avatar_key,避免更换头像池后历史评价突然变化。
05地址认证与技师入驻资料升级
现有短信验证码能力可复用,但必须增加“业务场景”和“一次性验证凭证”,避免登录验证码被重复用于地址或入驻认证。同时按截图所示扩展技师入驻资料,在现有身份证人像面、身份证国徽面、全身照下方增加技师证、健康证和营业执照,并把所在城市由自由输入改为已开通城市选择。
| 场景 | 交互设计 | 后端控制 |
|---|---|---|
| 客户新增地址 | 手机号下方增加验证码输入与“获取验证码”。已验证手机号可显示“已认证”;修改为新号码后必须重新验证。 | 保存接口要求 verification_token;号码、场景、用户不一致则拒绝。 |
| 客户编辑地址 | 联系人或地址变化、手机号不变时不重复验证;手机号变化时重新验证。 | 对比原记录手机号,防止前端绕过。 |
| 技师入驻手机号 | 联系电话增加验证码;验证通过后才能提交申请。 | 申请记录保存已验证手机号和验证时间;审核页显示“手机已认证”。 |
| 入驻证照 | 在身份证正反面和全身照下方增加“技师证、健康证、营业执照”三个独立上传位;支持拍照、相册选择、预览、替换和删除,并显示必填/选填标识。 | 三类证照分别保存,不复用全身照字段;限制图片格式、大小和数量,记录证照类型、文件地址、有效期及审核状态。 |
| 所在城市 | 点击“所在城市”弹出城市选择器,仅展示后台已开通城市,可看到城市名称并选择一项;不再允许键盘自由录入。 | 前端读取已开通城市接口并提交 city_id;服务端再次校验城市存在且为已开通状态,同时保存城市名称快照。 |
证照审核与城市选择规则
- 技师证、健康证和营业执照分别显示“未上传、待审核、已通过、已驳回、已过期”状态;驳回时必须填写原因,技师可重新上传。
- 各证照是否必填、允许数量和有效期要求由后台配置;默认进入正式接单前必须满足该城市的入驻资料规则。
- 健康证等有期限的证照支持填写或识别有效期,并在到期前提醒技师和运营;过期后的接单限制按后台规则执行。
- 已选择城市在提交申请后固化。审核中如该城市被停用,申请不得自动通过,后台提示改选其他已开通城市。
- 城市列表按后台排序展示;没有已开通城市时显示“当前暂无可申请城市”,不得提交空城市或自定义城市名称。
安全与运营规则
- 验证码 5 分钟有效、60 秒内不可重复发送;同手机号、同 IP、同设备设置小时/日限额。
- 验证码最多尝试 5 次,连续失败触发短时冻结;日志对手机号进行脱敏。
- 生产环境禁止返回验证码;短信签名和模板需在供应商侧先审核。
- 身份证、技师证、健康证和营业执照属于敏感审核资料,仅授权审核人员查看,访问和审核操作留痕,文件使用受控地址访问。
- 若上海云信同时提供短信能力,可通过统一供应商适配层切换;否则保留现有短信宝作为验证码通道。
06上海云信:虚拟号、通话录音与接单通知
技师联系客户时不展示双方真实号码。系统按订单建立隐私号绑定,通话由上海云信侧桥接并录音;新订单同时触发短信和语音电话通知,提升接单及时率。
隐私通话链路
短信 + 语音接单通知
- 订单支付成功:立即给技师发送短信。
- 同时发起语音电话:“您有新的服务订单,请及时进入平台接单”。
- 未接听或在配置时间内未接单:按规则重试一次或通知运营。
- 技师已接单、订单取消或过期后停止后续呼叫。
后台能力
- 订单通话记录:主叫/被叫角色、虚拟号、开始/接通/结束时间、结果、时长。
- 录音在线播放、权限控制、访问日志、下载开关和保留期限。
- 通知日志:短信/语音请求号、送达状态、失败原因、重试次数。
- 供应商配置:环境、接口地址、密钥、签名、模板、回调白名单。
接口与数据设计
| 模块 | 建议设计 | 可靠性要求 |
|---|---|---|
| 供应商适配层 | 定义隐私号绑定、解绑、语音通知、短信发送、录音查询的统一接口,上海云信作为首个实现。 | 未来更换供应商不影响订单主流程。 |
| 隐私号绑定 | privacy_call_bindings 记录订单、双方号码密文、虚拟号、供应商绑定 ID、有效期和状态。 | 一单一绑定或按供应商规则复用,订单结束自动解绑。 |
| 通话记录 | call_records 保存供应商通话 ID、状态、时长、录音、回调原文摘要。 | 回调验签、幂等去重、乱序处理。 |
| 录音存储 | 供应商录音回调后异步转存对象存储,后台通过鉴权临时链接播放。 | 避免永久暴露供应商 URL;支持保留期清理。 |
| 通知任务 | notification_jobs 记录渠道、模板、目标、状态、失败原因和重试。 | 异步执行,不阻塞支付回调;失败可追踪。 |
合规建议:下单协议和隐私政策中明确告知隐私号与录音用途、保存期限和查询权限;录音仅用于服务保障、纠纷处理和依法审计。真实手机号、录音地址和供应商密钥均应加密或脱敏存储。
07基础服务与多次加钟差异化提成
把“提成”明确为技师实收比例,并按服务阶段分别配置。基础服务、第一次加钟、第二次及以后加钟各自形成价格和分润快照,后续修改后台比例不影响历史订单。
加钟业务流程
| 规则 | 方案 | 控制点 |
|---|---|---|
| 加钟商品 | 后台配置加钟时长、价格、适用服务、上下架状态;可按城市或服务设置。 | 禁止前端自行传金额。 |
| 次数认定 | 同一主订单下按已支付成功的加钟顺序生成 addon_seq。 | 支付失败/取消不占次数;并发创建需加锁。 |
| 提成档位 | 基础服务、首次加钟、第二次加钟、第三次及以后可独立配置技师实收比例。 | 0-100% 校验,并显示平台剩余金额试算。 |
| 结算快照 | 每个订单明细保存金额、技师比例、技师收入、平台收入和规则版本。 | 退款按原明细、原比例逆向冲账。 |
| 订单展示 | 客户、技师、后台均可查看加钟次数、时长、支付状态和分项金额。 | 基础服务与加钟账目可对账。 |
08退款审核与车费误工费扣除
无论客户是否为会员,也无论订单通过微信、支付宝、会员余额或其他已开通方式支付,客户申请退款后统一进入退款审核流程。后台可全额退款、扣除车费后退款、扣除误工费后退款、组合扣费后退款,或在符合已公示规则且证据充分时拒绝退款。
后台审核操作
| 审核操作 | 金额规则与交互 | 处理结果 |
|---|---|---|
| 同意全额退款 | 扣费金额为 0;确认框显示订单实付、已退金额和本次应退金额。 | 将全部可退款实付金额按原支付渠道退回客户。 |
| 扣车费并退款 | 点击“扣车费”,手工输入车费金额,必填扣费原因;可上传行程、定位、票据或沟通记录。 | 车费留在订单扣费账目中,其余可退款金额自动原路退回。 |
| 扣误工费并退款 | 默认按可退款实付金额的 30% 试算,后台可改比例或直接手工输入金额;页面同步显示扣费和客户实退。 | 例如实付 500 元,扣 30% 即 150 元,客户退款 350 元。 |
| 组合扣费并退款 | 可同时录入车费和误工费,系统实时合计;每一项分别填写原因和证据。 | 总扣费不得超过可退款实付金额,剩余金额原路退回。 |
| 拒绝退款 | 不发起退款,必须选择拒绝规则、填写说明并上传必要证据;高金额或争议订单可要求二级审批。 | 退款单标记“已拒绝”,客户可查看理由并申请客服复核。 |
支付渠道与资金处理
| 支付来源 | 退款执行 | 关键控制 |
|---|---|---|
| 微信支付 | 使用原支付单号和独立退款单号调用微信支付退款接口,只提交审核后的应退金额;接收退款结果通知并支持主动查询。 | 金额以分为单位;回调验签、幂等;接口受理不等于到账成功。 |
| 支付宝支付 | 按原支付宝交易号发起全额或部分退款,并保存渠道退款号和结果。 | 与微信共用统一退款状态机和对账流程。 |
| 会员余额支付 | 将应退金额原路退回会员余额,并生成一笔不可修改的钱包退款流水。 | 余额更新和流水创建必须在同一数据库事务中完成。 |
| 混合支付 | 如后续支持余额加微信等组合支付,按原支付构成分别退回对应来源,不得把微信实付全部改退到余额。 | 各渠道退款之和必须等于审核后的应退总额。 |
| 会员身份 | 会员与非会员使用同一退款审核主流程;如会员享有免费取消或减免误工费,只作为规则优惠单独配置。 | 会员等级不能改变已支付资金的原路退回原则。 |
退款状态与结算联动
- 退款状态独立于订单状态:待审核、审核通过、部分退款、已拒绝、退款处理中、退款成功、退款失败、已关闭。
- 后台点击审核按钮后先展示二次确认:实付金额、各项扣费、应退金额、退款渠道、客户到账说明;确认后不可直接修改,只能撤销重审或补充退款。
- 退款处理中禁止重复提交;每次请求使用唯一幂等号。失败后可自动重试或人工重试,但累计退款不得超过订单可退款金额。
- 未结算订单直接减少技师、渠道和平台的待结算金额;已结算订单按原结算快照生成反向冲正流水,不覆盖历史账目。
- 车费、误工费的最终归属可配置为技师补偿或平台收入,并在审核时明确展示;不得只扣客户款项而不记录资金去向。
- 客户和技师均收到审核结果,内容包括原实付、扣费项目、扣费金额、退款金额、处理时间、原因和申诉入口。
09渠道推广与分佣体系
渠道端面向公众号、服务号、酒店、娱乐场所及其他线下合作方。每个渠道可生成专属分享链接和渠道二维码,客户通过对应入口访问并完成有效订单后,系统按订单快照向渠道结算约定佣金,例如订单实付金额的 20%。本版明确移除原方案中的城市代理功能,不建设代理申请、代理后台、区域代理权限和代理分润。
| 渠道场景 | 入口与归因 | 分佣建议 |
|---|---|---|
| 公众号 / 服务号 | 渠道端复制专属链接或短链,合作方挂到菜单、文章或消息中;链接参数签名,防止人工篡改渠道身份。 | 可按订单实付金额或平台可分配收入的一定比例结算。 |
| 酒店 / 娱乐场所 | 渠道端下载带渠道码的二维码,打印张贴;扫码进入小程序或 H5 后记录首次有效触点。 | 支持统一比例、单渠道比例和固定金额,20% 作为可配置示例。 |
| 人工补录 | 特殊订单由有权限的运营人员补录或调整渠道,必须填写原因并保留审计日志。 | 调整只影响未结算订单;已结算订单走冲正与重算。 |
渠道端与后台能力
渠道端
专属渠道码、分享链接、二维码下载、访问量、下单量、有效订单、预估佣金、结算单和收款记录。
运营后台
渠道档案、合同期、启停、归因有效期、覆盖规则、比例/固定金额、结算周期和数据导出。
财务控制
订单完成后结算,退款自动冲正;比例和基数固化到订单,历史账单不受后续配置修改影响。
- 默认采用“最后一次有效渠道触点”归因,也可切换为“首次有效触点”;有效期建议 30 天。
- 同一订单只归属一个客户渠道,避免重复分佣;自有自然流量不产生渠道佣金。
- 渠道端仅查看本渠道的汇总和脱敏订单,不展示客户完整手机号、详细地址或技师隐私信息。
- 二维码和链接停用后不再接受新归因,但历史订单及结算记录继续可查。
10技师在线状态与履约定位
把技师在线状态、可预约状态和服务履约状态串成完整链路。用户看到的列表排序和按钮状态由服务端统一返回;技师到达、开始服务和完成离场均形成带时间与定位的证据记录。
在线状态与技师列表
| 状态 | 用户端展示 | 服务端判定与排序 |
|---|---|---|
| 在线可接单 | 排在离线技师之前;“立即预约/选择技师”按钮为绿色,可点击。 | 接单开关开启、账号正常、在排班时段、无冲突订单,且最近心跳未超时。 |
| 忙碌 / 暂不可约 | 可保留在在线分组中但显示最近可约时间;当前时段按钮灰色禁用。 | 已有服务中订单或选定时段冲突,但账号仍在线。 |
| 离线 | 统一排在技师列表最下面,显示“离线”;预约按钮为灰色且不可点击。 | 主动下线、接单开关关闭、超出排班、心跳超时或账号暂停。 |
排序建议:在线可接单 → 在线忙碌 → 离线;同组内再按推荐权重、距离、评分和最近可约时间排序。按钮禁用必须由前后端双重校验,避免仅改样式后仍可提交订单。
到达、拍照与开始服务
- “到达”页面明确展示客户订单地址;定位成功后展示当前定位地址、定位时间、精度和与订单地址的直线距离。
- 建议电子围栏半径默认 300 米并可后台配置。超出范围时禁止正常打卡,可提交定位截图、现场照片和原因给后台人工审核。
- 拍照凭证保存订单号、技师、时间、经纬度、水印摘要和文件哈希;后台可查看,普通客户端不公开。
- 定位失败时提供重试和权限引导;不得用空定位直接进入服务状态。
结束提醒与离场监测
| 触发点 | 通知与判断 | 后台记录 |
|---|---|---|
| 预计结束前 5 分钟 | 优先发送技师端站内推送,并以短信兜底,告知“服务还有 5 分钟结束”;每个服务段只发送一次。 | 计划触发时间、发送渠道、模板、送达状态、失败原因与重试次数。 |
| 点击服务完成 | 记录完成定位并启动 3 分钟离场观察;技师端提示保持定位权限,以便完成履约核验。 | 完成时间、完成位置、定位精度、围栏半径和观察截止时间。 |
| 完成后超过 3 分钟仍未离开 | 若连续有效定位仍在客户地址围栏内,向技师发送离场提醒,并向运营后台产生异常信息;可配置是否同时短信通知技师。 | 围栏内采样、提醒发送、技师反馈和运营处理结果。 |
| 已离场 / 无法判断 | 连续定位在围栏外则结束监测;定位关闭、信号弱或后台限制时标记“无法判断”,不得直接认定未离场。 | 离场确认时间或无法判断原因,供客服审核。 |
11技师转单与虚拟技师调度
转单用于已接订单因时间、距离或突发情况无法履约时的受控调度;虚拟技师用于冷启动阶段展示可调度服务席位和承接订单,最终履约人必须是通过实名认证与资质审核的正式技师。
技师转单
- 原技师在允许状态下点击“申请转单”,选择原因并填写说明。
- 系统筛选同城市、同服务能力、在线且时段可用的正式技师。
- 候选技师确认接单;必要时由运营后台指派或审批。
- 原技师、接手技师、客户同时收到变更通知,订单保留完整流转记录。
- 新技师确认后才解除原绑定;无人承接时订单保持原状态并通知运营介入。
虚拟技师
- 后台创建“平台调度席位”,配置服务范围、城市、展示名、头像、可售时段和可承接品类。
- 用户端必须以“平台安排技师”等明确文案展示,不伪造实名认证、虚假销量、评价、实时在线或个人资质。
- 虚拟席位收到订单后进入调度池,由运营转给正式技师;未分配真人前不得进入出发、到达或开始服务状态。
- 正式技师接单后,客户侧展示实际履约技师信息,并发送人员变更通知。
| 控制项 | 业务规则 | 风险控制 |
|---|---|---|
| 可转单状态 | 待出发、已出发可申请;到达后原则上需运营审批;服务开始后禁止普通转单。 | 防止临场甩单和履约责任不清。 |
| 时段与能力校验 | 接手技师必须通过服务品类、城市、排班、距离、冲突订单和账号状态校验。 | 确认时再次加锁校验,避免多人抢同一转单。 |
| 收入归属 | 未开始服务时收入全部转给接手技师;特殊补偿由后台按规则另记,不修改原订单金额。 | 分润变化形成快照和审计流水。 |
| 虚拟席位库存 | 按城市、品类和时段设置可售数量,超出真实可调度能力时自动停售。 | 避免超卖;超过分配时限自动升级运营或向客户提供改约/退款。 |
12多城市运营设计
采用“单城市也走城市主数据”的方案。首期即使只运营上海,也创建默认城市记录;后续新增城市只需后台开通和配置,不必再次改造订单、服务与权限基础结构。
| 模块 | 多城市能力 | 单城市首期表现 |
|---|---|---|
| 城市主数据 | 城市编码、名称、省份、经纬度、开通状态、排序、客服信息、默认规则。 | 仅启用“上海市”,前台可隐藏城市切换入口。 |
| 技师入驻 | 所在城市使用已开通城市下拉/弹层选择,提交 city_id 并校验开通状态;后台审核页展示城市名称。 | 选择器仅显示“上海市”,不可手工输入其他城市。 |
| 服务与价格 | 城市可售服务、城市价、加钟价、上门费、营业时间。 | 自动读取上海配置。 |
| 技师 | 技师归属城市/片区;列表、搜索、首页推荐按城市过滤。 | 现有技师批量迁移到上海。 |
| 内容运营 | 轮播、首页推荐、公告、优惠券可全局或指定城市。 | 默认全局内容,允许上海覆盖。 |
| 订单 | 按服务地址确认城市,固化 city_id;跨城技师不可接单。 | 所有新订单写入上海城市 ID。 |
| 后台权限 | 总部看全部;城市管理员、调度和渠道运营只看授权城市。 | 超级管理员不受影响。 |
13整体数据与系统改造
建议新增或调整的核心数据
| 数据对象 | 用途 | 类型 |
|---|---|---|
| orders | 新增标准预约开始/结束时间、城市、实际履约技师、虚拟席位来源、预约规则快照,以及累计退款、累计扣费和退款状态摘要;保留历史文案兼容。 | 调整现有 |
| order_addons | 保存第 N 次加钟、时长、金额、支付状态、提成比例与收入快照。 | 新增 |
| refund_requests | 保存客户退款申请、退款原因、申请凭证、审核结果、应退金额、状态流转、复核记录和操作人。 | 新增 |
| refund_deductions | 逐项保存车费、误工费和其他经确认扣费的类型、比例、金额、理由、证据及审批记录。 | 新增 |
| payment_refunds | 保存每个原支付渠道的退款请求号、渠道退款号、退款金额、回调报文摘要、失败原因和重试状态。 | 新增 |
| phone_verifications | 保存场景化验证凭证、手机号摘要、有效期、核销状态和风控信息。 | 新增 |
| applications | 技师入驻申请增加 city_id 和城市名称快照;历史申请按现有城市名称匹配迁移,无法匹配的进入人工处理。 | 调整现有 |
| application_documents | 按申请保存身份证、全身照、技师证、健康证和营业执照的类型、文件地址、有效期、审核状态、驳回原因及审核人。 | 新增 |
| privacy_call_bindings | 保存订单隐私号绑定及有效期。 | 新增 |
| call_records | 保存通话事件、时长、录音及供应商回调状态。 | 新增 |
| notification_jobs | 统一短信、语音、站内推送任务,覆盖接单、结束前 5 分钟和完成后未离场提醒。 | 新增 |
| service_checkins | 保存到达、开始、完成打卡的时间、地址、经纬度、精度、距离、照片凭证和审核状态。 | 新增 |
| technician_locations | 保存履约期间必要的定位采样和围栏判断结果,并按最小留存策略定期清理。 | 新增 |
| order_transfers | 保存转出人、接手人、原因、状态、确认/审批时间及订单技师变更快照。 | 新增 |
| virtual_technician_slots | 保存平台调度席位、公开展示标识、城市/品类/时段库存和最终履约技师。 | 新增 |
| cities / city_services | 城市开通、服务、价格和规则。 | 新增 |
| channels / channel_touchpoints | 保存渠道档案、分享链接/二维码、访问触点、归因有效期与覆盖规则。 | 新增 |
| channel_commissions | 保存订单分佣基数、比例/固定金额、规则快照、结算状态及退款冲正。 | 新增 |
| 分销/分润台账 | 复用现有分销归因和流水能力支持渠道结算,不恢复或新建城市代理功能。 | 调整现有 |
| 评价 | 增加虚拟头像键;前台响应不再使用真实头像。 | 调整现有 |
非功能要求
安全
- 手机号、身份证及资质证照、精确定位、打卡照片、录音地址和第三方密钥最小化暴露。
- 云信及支付退款回调均执行验签、时间窗、防重放和必要的来源校验。
- 查看证照、定位、照片、录音与真实信息,以及资质/退款审核、扣费和重试操作均记录审计日志并按角色授权。
可靠性
- 支付、退款、加钟、转单、回调、提醒和结算采用唯一幂等键。
- 退款受理、渠道回调和主动查询共同驱动状态,重复通知不得重复退钱;金额统一以分存储和计算,禁止浮点误差。
- 通知异步执行,失败重试且不阻塞订单;预约占用、转单接手和虚拟席位库存使用事务/锁防并发冲突。
兼容
- 历史订单保留原预约文案并兼容展示。
- 现有用户、技师、分销关系不丢失。
- 先加字段和双读,再迁移,降低上线风险。
可运营
- 提前量、围栏、提醒、转单、虚拟席位、提成、退款扣费、城市和渠道规则均后台化。
- 关键金额、归因、人员变更及退款规则均保存快照。
- 提供订单、退款、渠道对账、定位异常、转单、通话、通知和分润的查询与导出;支付渠道日账单与平台退款台账可核对差异。
14实施阶段与工作量评估
以下为基于当前源码的初步开发评估,包含产品细化、前后端开发、数据迁移、联调和测试,不包含上海云信/短信模板/虚拟号码资源的供应商审核等待时间。
| 交付批次 | 可独立上线内容 | 上线价值 |
|---|---|---|
| 第一批 | 自动预约、30 分钟预留、评价虚拟头像、地址/入驻短信认证、技师证/健康证/营业执照上传审核及已开通城市选择。 | 改善下单体验与入驻资料真实性。 |
| 第二批 | 在线/离线排序、到达定位、服务前拍照、结束前提醒和离场异常。 | 补齐技师履约证据和运营风控。 |
| 第三批 | 云信虚拟号、录音、短信与语音通知;加钟和分项结算。 | 保护隐私、提升响应并增加客单价。 |
| 第四批 | 退款申请与审核、车费/误工费扣除、全额或部分原路退款、拒绝复核和财务对账。 | 形成可执行、可追溯的售后资金闭环。 |
| 第五批 | 转单、虚拟技师调度席位、渠道链接/二维码和分佣。 | 缓解冷启动供给不足并建立合作获客闭环。 |
| 第六批 | 多城市、数据权限、全链路异常测试与上线。 | 支持规模化拓城和稳定运营。 |
15验收口径
- 打开确认订单页自动出现不早于服务器当前时间 30 分钟的可用预约时间,客户可修改;不可提交过期或冲突时段。
- 用户端和技师端评价列表不再暴露客户真实头像,历史与新增评价均显示稳定虚拟头像。
- 新增地址使用新手机号、技师提交入驻联系电话时,未通过短信验证码不能保存/提交;验证码不可跨场景复用。
- 技师入驻页在现有身份证正反面和全身照下方显示技师证、健康证、营业执照三个独立上传位,可按后台规则校验必填项,并支持预览、替换、删除和驳回后重新上传。
- 技师入驻的“所在城市”不可自由输入;选择器只展示后台状态为已开通的城市名称,提交停用、无效或伪造的 city_id 时服务端拒绝申请。
- 后台审核可分别查看和审核三类新增证照,记录通过/驳回原因、审核人和时间;有有效期的证照到期前产生提醒。
- 技师联系客户仅通过虚拟号;通话结束后后台可查看状态、时长并按权限播放已回传录音。
- 支付成功的新订单按配置向技师发送短信及语音电话;失败状态和重试记录后台可查。
- 服务中可完成一次或多次加钟,客户支付后才生效;基础服务和每次加钟分别按后台比例正确结算。
- 客户申请退款后生成独立退款单并冻结相关待结算资金;后台可选择全额退款、扣车费、扣误工费、组合扣费或有依据地拒绝退款。
- 误工费默认按可退款实付金额的 30% 试算,也可在授权范围内修改比例或手工输入金额;系统实时显示扣费与实退金额,所有扣费合计不得超过可退款金额。
- 无扣费时可一键同意并全额退款;有扣费时仅将剩余金额退回。微信、支付宝和会员余额均按原支付来源退回,重复提交或重复回调不会造成重复退款。
- 拒绝退款必须填写规则依据、原因和必要证据,客户可看到结果并申请复核;退款成功后技师、渠道及平台结算按原快照正确冲正。
- 在线可接单技师排在前面且按钮绿色可用;离线技师统一排在列表底部,按钮灰色禁用,接口绕过也无法下单。
- 技师点击到达时显示订单服务地址和当前定位地址;未完成合规范围内的到达定位与服务前现场拍照,不能开始服务。
- 预计结束前 5 分钟只向技师发送一次提醒;完成后 3 分钟仍有连续有效定位处于围栏内时产生提醒和后台异常,定位不可用时明确标记“无法判断”。
- 技师可在允许状态发起转单;接手技师通过城市、品类、排班和冲突校验后才完成换绑,所有参与方收到通知并可追溯。
- 虚拟技师明确显示为平台调度席位,不伪造真人资质或评价;订单开始服务前必须换绑到实名审核的正式技师。
- 渠道端可复制专属链接、下载渠道二维码并查看脱敏数据;订单固化渠道和分佣快照,完成后入账,退款后正确冲正。
- 切换城市后仅展示该城市可售服务和可接单技师;订单、合作方和后台权限均不串城。
- 取消、退款、重复回调、通知失败、定位拒绝、弱网、并发预约、并发加钟和并发转单等异常路径有明确结果,账务可追溯。
16开发前需客户确认与提供
| 序号 | 确认项 | 建议默认值 / 资料 |
|---|---|---|
| 1 | 预约提前量、时间步长、最长可约天数、订单间隔。 | 30 分钟 / 30 分钟 / 5 天 / 0-30 分钟。 |
| 2 | 虚拟头像风格和数量。 | 中性人物插画 12-24 个,由客户确认版权素材。 |
| 3 | 短信供应商、签名、验证码与通知模板。 | 现有短信宝继续使用,或确认迁移上海云信。 |
| 4 | 上海云信合同账号、正式接口文档、测试密钥、产品能力与资费。 | 必须包含所需隐私号模式、录音、语音通知、回调和号码资源。 |
| 5 | 录音告知文案、保存期限、可播放角色、是否允许下载。 | 建议仅授权客服/管理员播放,默认禁止普通下载。 |
| 6 | 加钟时长与定价;50/70/80/90 是否为技师实收比例;第三次以后档位。 | 开发前签字确认结算示例。 |
| 7 | 在线判定心跳超时时间、忙碌技师展示方式、同组排序优先级。 | 心跳 5 分钟超时;在线可接单、在线忙碌、离线三段排序。 |
| 8 | 到达围栏半径、拍照要求、异常打卡审批、定位和照片保存期限。 | 围栏 300 米;必须现场拍照;超范围人工审核;按隐私政策设最短必要保存期。 |
| 9 | 结束前提醒渠道、离场提醒接收人、完成后短时定位授权文案。 | 站内推送优先、短信兜底;技师和运营接收;完成后观察 3 分钟。 |
| 10 | 车费、误工费的适用场景、免费取消时限、默认比例、金额上限、可手工改价角色及审批权限。 | 误工费默认 30% 仅作业务初稿;后台手工金额须受权限和上限控制,最终规则需在付款前公示。 |
| 11 | 各扣费所需证据、扣费收入归属、拒绝退款条件、二级审批金额门槛和客户复核时限。 | 定位/行程/票据/沟通记录按场景配置;拒绝必须有规则依据和复核入口,扣费归属需财务确认。 |
| 12 | 退款时优惠券是否退回、有效期如何恢复,以及混合支付的退款顺序。 | 优惠券不折现;建议未履约全退时恢复,已履约或客户违约时按已公示规则处理。 |
| 13 | 转单状态、审批条件、超时、补偿和收入归属;虚拟席位对外名称及调度时限。 | 开始服务后禁转;虚拟席位统一显示“平台安排技师”,超时提供改约或退款。 |
| 14 | 渠道合同、归因模型、有效期、分佣基数、比例、结算周期和提现规则。 | 最后有效触点 30 天;订单实付金额 20% 仅作示例,最终以合同为准。 |
| 15 | 首批开通城市、城市运营负责人、各城市服务/价格是否相同。 | 首期上海,保留后台新增城市能力。 |
| 16 | 技师证、健康证、营业执照分别是否必填、允许上传数量、有效期、证照到期后的接单限制及营业执照适用对象。 | 建议技师证、健康证必填;营业执照按个人/机构入驻类型配置,最终由客户结合当地经营要求确认。 |
17源码审查依据(内部对照)
以下用于说明本方案基于实际代码而非通用模板,客户阅读时可保留,也可在正式商务版中删除。
| 审查点 | 当前源码位置 | 结论 |
|---|---|---|
| 预约时段与提交 | 前端/pages/order-confirm/order-confirm.vue(时间段、日期、提交、地址保存) | 整点、前端判断、中文文案入单。 |
| 订单与结算 | server/internal/handler/order.go、settlement.go | 全单统一平台抽成,无加钟分项。 |
| 取消与退款 | server/internal/handler/order.go(CancelOrder)、admin_manage.go(AdminCancelOrder)、model/order.go、model/pay.go、pkg/pay/pay.go | 现有取消仅对余额支付自动全额退回;缺少客户退款申请、人工审核、部分退款、车费/误工费明细、微信/支付宝退款调用和退款回调。 |
| 评价头像 | server/internal/handler/order.go、前端/pages/tech-detail/tech-detail.vue | 非匿名评价保存并展示用户头像。 |
| 地址与入驻 | server/internal/handler/user.go、application.go、model/technician.go、前端/pages/join/join.vue | 没有业务场景短信凭证校验;技师申请只有身份证正反面和全身照,城市为任意文本,后端未校验城市是否已开通。 |
| 短信与录音 | server/internal/pkg/notify、handler/technician.go | 已有短信事件;录音为手工上传。 |
| 在线与订单状态 | server/internal/model/technician.go、handler/technician.go、前端/pages/tech-order-detail/tech-order-detail.vue | 已有接单开关及到达/开始/完成状态,但缺少列表统一排序、打卡凭证、转单和离场监测。 |
| 定位基础 | 前端/pages/workbench/workbench.vue、server/internal/handler/geo.go | 已有技师定位上报和逆地理编码基础,可扩展订单打卡与短时围栏判断。 |
| 渠道与分销 | server/internal/handler/distribution.go、前端/pages/dist-link/dist-link.vue | 现有推广归因和分润底座可复用,但需新增企业/场所渠道档案、渠道二维码/链接和独立结算规则。 |
| 城市 | 前端/pages/index/index.vue、server/internal/handler/service.go | 前端可选城市,服务/技师接口未按城市过滤。 |
客户需求确认
项目负责人确认