# 居家服务(Home Service)后端 RPC 缺口清单 > 生成日期:2026-06-02 > 适用项目:医疗-consumer / 医疗-delivery > 目标:替代前端直接写 `ec_*` / `hc_*` 新链表,所有状态变更必须由后端 RPC 驱动 --- ## 1. 当前完成状态(前端侧) ### 1.1 Delivery 履约动作 ✅ 已完成 `api/delivery.uts` 中所有 delivery worker 动作已优先调用 `rpc_delivery_*` RPC,fallback 为本地 mock(不碰数据库)。 | 前端动作 | RPC 名称 | 状态 | |---------|---------|------| | 接单 | `rpc_delivery_accept_order` | ✅ | | 拒单 | `rpc_delivery_reject_order` | ✅ | | 出发 | `rpc_delivery_start_depart` | ✅ | | 到达 | `rpc_delivery_arrive_order` | ✅ | | 签到 | `rpc_delivery_checkin_order` | ✅ | | 开始服务 | `rpc_delivery_start_service` | ✅ | | 保存进度 | `rpc_delivery_save_progress` | ✅ | | 上传留痕 | `rpc_delivery_upload_evidence` | ✅ | | 重试留痕 | `rpc_delivery_retry_evidence` | ✅ | | 提交异常 | `rpc_delivery_submit_exception` | ✅ | | 完成服务 | `rpc_delivery_finish_service` | ✅ | | 工单列表 | `rpc_delivery_order_list` | ✅ | | 工单详情 | `rpc_delivery_order_detail` | ✅ | | 仪表盘 | `rpc_delivery_dashboard` | ✅ | | 服务记录 | `rpc_delivery_record_list` | ✅ | | 消息列表 | `rpc_delivery_message_list` | ✅ | | 在线状态 | `rpc_delivery_set_online_status` | ✅ | ### 1.2 Home Service 服务人员动作 ✅ 已完成 `homeServiceService.uts` 中 worker 侧方法已切换为调用 delivery RPC: | 前端方法 | 调用 RPC | 状态 | |---------|---------|------| | `completeWorkerTask` | `rpc_delivery_finish_service` | ✅ | | `submitWorkerCheckIn` | `rpc_delivery_checkin_order` + `rpc_delivery_start_service` | ✅ | | `submitWorkerServiceRecord` | `rpc_delivery_save_progress` | ✅ | | `submitWorkerException` | `rpc_delivery_submit_exception` | ✅ | > 注:以上方法不再直接 `update ec_care_tasks` / `insert hc_work_order_events`。 ### 1.3 Consumer 验收动作 ⚠️ 已设安全门 `serviceOrderService.uts` 中对 care task(UUID 格式 ID)已拒绝直接写表,返回提示: | 前端方法 | 旧行为 | 当前行为 | |---------|--------|---------| | `confirmServiceOrder` | 直接 `update ec_care_tasks` + `insert ec_care_records` | ❌ 拦截,提示“验收功能正在升级” | | `rejectServiceOrderAcceptance` | 直接 `update ec_care_tasks` + `insert hc_work_order_exceptions` | ❌ 拦截,提示“验收功能正在升级” | | `saveServiceRecord` | 直接 `insert ec_care_records` | ❌ 拦截,提示“服务记录功能正在升级” | | `dispatchPaidHomecareOrder` | 调用旧 `rpc_homecare_auto_dispatch` | ✅ 对 UUID 格式订单返回“同步中”安全提示;仅对 `so-` 前缀旧订单调用旧 RPC | ### 1.4 Admin 管理动作 ⚠️ 已设安全门 `homeServiceService.uts` 中 admin 方法不再直接写表,仅返回本地构建的 mock 详情: | 前端方法 | 状态 | |---------|------| | `submitAdminAssessment` | ⚠️ 返回本地构造的 assessment 对象,未写库 | | `submitAdminServicePlan` | ⚠️ 返回本地构造的 plan 对象,未写库 | | `submitAdminRectification` | ⚠️ 返回本地构造的 rectification 对象,未写库 | | `submitAdminSettlementArchive` | ⚠️ 操作本地 mock 数组 `ADMIN_SETTLEMENTS`,未写库 | ### 1.5 工单创建 ⚠️ 过渡保留 `tryCreateCareTask` 在 consumer 和 delivery 的 `serviceOrderService.uts` 中仍直接 `insert ec_service_requests` + `ec_care_tasks`,但已: - 移除前端自动派单逻辑(不再写入 `assigned_to` + `ORDER_ASSIGNED`) - 移除前端直接 `insert hc_work_order_events` - 增加 `ecServiceRequestCreateUnavailable` / `ecCareTaskCreateUnavailable` 开关,遇到表字段缺失时自动停用 --- ## 2. 后端 RPC 缺口清单(按优先级) ### 🔴 P0 — 阻断核心流程,必须补齐 | 缺口编号 | RPC 名称 | 用途 | 调用方 | 当前替代方案 | |---------|---------|------|--------|-------------| | P0-1 | `rpc_consumer_create_homecare_task` | 消费者下单后创建/激活 `ec_service_requests` + `ec_care_tasks` | `serviceOrderService.uts` `tryCreateCareTask` | 前端直接 INSERT(过渡保留) | | P0-2 | `rpc_payment_callback_activate_care_task` | 支付成功后由后端自动/手动激活 care task | `payment.uvue` `dispatchPaidHomecareOrder` | 返回“同步中”提示,无实际激活 | > **说明**:P0-1 和 P0-2 解决的是“工单从哪里来”的问题。理想流程是: > 1. 消费者下单 → 写 `hss_service_orders`(旧交易链,保留) > 2. 支付成功 → 后端回调/RPC 创建 `ec_service_requests` + `ec_care_tasks` > 3. 后端调度系统派单 → `update ec_care_tasks` `assigned_to` + `ORDER_ASSIGNED` > 当前步骤 2/3 缺失,导致非套餐单走前端直接 INSERT。 ### 🟡 P1 — 影响用户体验,应尽快补齐 | 缺口编号 | RPC 名称 | 用途 | 调用方 | 当前替代方案 | |---------|---------|------|--------|-------------| | P1-1 | `rpc_consumer_confirm_acceptance` | 消费者确认验收:`ec_care_tasks` → `ACCEPTED`,写入 `ec_care_records`(review) | `serviceOrderService.uts` `confirmServiceOrder` | 拦截,提示“正在升级” | | P1-2 | `rpc_consumer_reject_acceptance` | 消费者拒绝验收:`ec_care_tasks` → `ACCEPTANCE_REJECTED`,写入 `hc_work_order_exceptions` | `serviceOrderService.uts` `rejectServiceOrderAcceptance` | 拦截,提示“正在升级” | | P1-3 | `rpc_consumer_save_service_record` | 消费者/家属补充服务记录 | `serviceOrderService.uts` `saveServiceRecord` | 拦截,提示“正在升级” | ### 🟢 P2 — 管理后台功能,可排期实现 | 缺口编号 | RPC 名称 | 用途 | 调用方 | 当前替代方案 | |---------|---------|------|--------|-------------| | P2-1 | `rpc_admin_submit_assessment` | Admin 提交评估结果,写入评估表 + 事件 | `homeServiceService.uts` `submitAdminAssessment` | 仅返回本地对象,未持久化 | | P2-2 | `rpc_admin_submit_service_plan` | Admin 提交服务计划 | `homeServiceService.uts` `submitAdminServicePlan` | 仅返回本地对象,未持久化 | | P2-3 | `rpc_admin_submit_rectification` | Admin 提交整改结论 | `homeServiceService.uts` `submitAdminRectification` | 仅返回本地对象,未持久化 | | P2-4 | `rpc_admin_settlement_archive` | Admin 结算归档 | `homeServiceService.uts` `submitAdminSettlementArchive` | 仅操作本地 mock 数组 | --- ## 3. 前端已清理的直接写表现状 ### 3.1 已完全消除的前端直接写表 以下前端直接写表行为已彻底移除: - ❌ `update ec_care_tasks`(由 delivery worker 动作触发)— 已全部改为 `rpc_delivery_*` - ❌ `insert hc_work_order_events`(由 worker/consumer 动作触发)— 已改为后端 RPC 统一写入 - ❌ `insert ec_care_records`(由 worker checkin/service record 触发)— 已改为 `rpc_delivery_checkin_order` / `rpc_delivery_save_progress` - ❌ `insert hc_work_order_exceptions`(由 worker exception 触发)— 已改为 `rpc_delivery_submit_exception` - ❌ `insert hss_service_order_status_logs`(旧链)— `insertLegacyStatusLog` 已改为 NO-OP + console.warn ### 3.2 仍保留的前端直接写表(仅限过渡) - ⚠️ `insert ec_service_requests` — `tryCreateCareTask`(consumer),有 `ecServiceRequestCreateUnavailable` 自动停用保护 - ⚠️ `insert ec_care_tasks` — `tryCreateCareTask`(consumer + delivery),有字段缺失自动停用保护 - ⚠️ `insert hss_service_orders` — 旧交易链路,用于套餐订单支付(预期中长期保留) - ⚠️ `update hss_service_orders` — `confirmServiceOrder` / `rejectServiceOrderAcceptance` 的 legacy 分支(仅对 `so-` 前缀订单) --- ## 4. 数据库表职责划分(当前约定) | 表名 | 职责 | 前端是否直接读写 | |------|------|----------------| | `ec_service_requests` | 新链服务申请 | ⚠️ 仅 `tryCreateCareTask` 过渡 INSERT,待 P0-1 RPC | | `ec_care_tasks` | 新链履约工单(核心状态) | ❌ 禁止前端直接 UPDATE,仅 SELECT 读详情/列表 | | `ec_care_records` | 服务记录(checkin、progress、review) | ❌ 禁止前端直接 INSERT/UPDATE | | `hc_work_order_events` | 状态事件/时间轴 | ❌ 禁止前端直接 INSERT | | `hc_work_order_exceptions` | 异常/整改记录 | ❌ 禁止前端直接 INSERT | | `hc_evidence_files` | 留痕文件 | ❌ 禁止前端直接 INSERT(走 `rpc_delivery_upload_evidence`) | | `hss_service_orders` | 旧交易链(套餐、支付) | ⚠️ 仍由前端直接 INSERT/SELECT(旧链路) | | `hss_service_assignments` | 旧派单链 | ❌ 前端不再直接写入 | | `hss_service_order_status_logs` | 旧状态日志 | ❌ 前端不再直接写入 | --- ## 5. 建议的后端实现顺序 1. **P0-2** `rpc_payment_callback_activate_care_task`:在支付成功回调或支付页面调用,自动根据 `hss_service_orders` 创建 `ec_service_requests` + `ec_care_tasks`,并触发后端调度。 2. **P0-1** `rpc_consumer_create_homecare_task`:如果需要在支付前创建工单(如非套餐单),提供此 RPC。 3. **P1-1 / P1-2** 消费者验收 RPC:解除前端拦截,让用户可以正常完成验收流程。 4. **P2-1 ~ P2-4** Admin 管理 RPC:补齐后台评估、计划、整改、归档功能。 --- ## 6. 相关文件索引 | 文件 | 说明 | |------|------| | `mall_sql/migrations/20260526_delivery_homecare_rpc_v1.sql` | 已实现的 delivery RPC( accept/reject/depart/arrive/checkin/start/save/finish/exception ) | | `mall_sql/migrations/20260601_hss_auto_dispatch_rpc_v2.sql` | 旧派单 RPC `rpc_homecare_auto_dispatch`(仅操作 `hss_*`,不应作为新链入口) | | `医疗-delivery/api/delivery.uts` | Delivery 端 API 层,已全量切换 RPC-first | | `医疗-consumer/api/delivery.uts` | Consumer 端 API 层,已全量切换 RPC-first | | `医疗-delivery/services/homeServiceService.uts` | Home Service 服务层,worker 动作已切 RPC,admin 动作已设安全门 | | `医疗-consumer/services/homeServiceService.uts` | 同上(consumer 端镜像) | | `医疗-consumer/services/serviceOrderService.uts` | Consumer 订单服务,care task 路径已设安全门,legacy 路径保留 | | `医疗-delivery/services/serviceOrderService.uts` | Delivery 订单服务,`tryCreateCareTask` 有过渡保护 | | `医疗-delivery/utils/homecare.constants.ts` | 统一状态常量 `ORDER_*` 与 `isCareTask()` 辅助函数 |