# 导游端接口与后台数据对齐基线 ## 目标 后续以 `mingdaojingjiang_guide_app` 的页面交互补充导游端接口,同时复用后台管理端已有的数据表、实体、枚举和业务规则。导游端、游客端和后台管理端必须读取同一份业务数据,禁止为导游端建立含义重复的订单、景区、评价、收益或导游档案模型。 ## 单一数据源 | 导游端功能 | 后端数据源 | 后台模块 | | --- | --- | --- | | 注册、认证、审核 | `guide_application`、`guide_user` | 导游审核、导游管理 | | 个人资料、所属团队 | `guide_user`、`guide_team` | 导游详情、讲解队管理 | | 可服务景区 | `guide_scenic_config`、`operation_scenic_spot` | 导游详情、景区管理 | | 服务类型、价格 | `operation_scenic_pricing` | 景区详情 | | 汇合点、地图坐标 | `operation_scenic_meeting_point` | 景区详情 | | 在线、接单、定位 | `guide_realtime_status` | 导游管理 | | 待接、当前、历史订单 | `tour_order` | 订单管理 | | 评价、综合评分 | `tour_order_review`、`guide_user.rating` | 评价管理、导游管理 | | 收益、结算、提现 | `tour_order`、`guide_withdrawal` | 财务流水、提现管理 | | 消息 | `sys_notice`、`guide_notice_read` | 系统通知 | | 协议、反馈、平台规则 | `agreement_setting`、`user_feedback`、`sys_config` | 协议、反馈、平台设置 | ## 当前状态 ### 已有真实接口 - 登录与退出:`/api/guide/auth/**` - 注册与证件上传:`/api/guide/registration/**` - 工作台:`GET /api/guide/workbench` - 导游资料:`GET/PUT /api/guide/profile` - 在线与定位:`GET/PUT /api/guide/realtime-status` - 消息与已读:`GET /api/guide/notifications`、`PUT /api/guide/notifications/{id}/read` ### 仍使用本地数据 - `services/guide.js` 中的资料、在线状态、景区、汇合点和资质提交仍以本地数据为主。 - `services/order.js` 中的订单、状态流转、统计和收益全部为本地数据。 - 评分页已接入 `GET /api/guide/ratings`;协议、反馈、更换手机号、注销和通用上传尚未真实接入。 ### 已发现的问题 - 后端尚无导游订单、收益和服务范围 controller。 - `GuideRealtimeStatusRequest` 使用整数状态,导游端使用 `offline/online/serving/busy/disabled` 字符串。 - 后端订单状态为 `PENDING_PAYMENT/PENDING_ACCEPT/PENDING_MEETING/IN_SERVICE/COMPLETED/CANCELLED/REFUNDED`,页面使用另一套小写状态。 - 页面仍存在日期、人数、手机号、景区和时长硬编码,联调时必须由响应数据替换。 ## 推荐接口 ### 第一优先级:接单闭环 | 接口 | 用途 | | --- | --- | | `GET /api/guide/service-scope` | 返回本人可服务景区、启用汇合点、坐标和服务类型 | | `GET /api/guide/orders?scope=pending` | 返回符合本人服务范围的待接订单 | | `GET /api/guide/orders?scope=current` | 返回本人待汇合或服务中的订单 | | `PUT /api/guide/orders/{id}/accept` | 原子绑定导游并进入待汇合状态 | | `PUT /api/guide/orders/{id}/arrive` | 记录到场时间 | | `PUT /api/guide/orders/{id}/start` | 记录开讲时间并进入服务中 | | `PUT /api/guide/orders/{id}/complete` | 记录结束时间并完成订单 | | `PUT /api/guide/realtime-status` | 保存景区、汇合点、定位和可接单状态 | ### 第二优先级:订单、收益、评分 | 接口 | 用途 | | --- | --- | | `GET /api/guide/orders` | 本人历史订单,支持状态、日期和分页 | | `GET /api/guide/orders/{id}` | 本人订单详情,聚合景区、汇合点、服务时长和游客信息 | | `GET /api/guide/earnings/summary` | 今日、本月和可提现金额 | | `GET /api/guide/earnings/records` | 与后台财务口径一致的本人收益明细 | | `GET /api/guide/reviews` | 本人评价列表 | | `GET /api/guide/reviews/summary` | 与 `guide_user.rating` 一致的评分汇总 | ### 第三优先级:个人中心 | 接口 | 用途 | | --- | --- | | `POST /api/guide/profile/avatar` | 安全上传头像并更新导游资料 | | `POST /api/guide/security/change-phone/**` | 旧号验证、新号验证和最终换绑 | | `POST /api/guide/applications/resubmit` | 重提资质并进入后台审核 | | `GET /api/guide/agreements` | 读取后台发布的协议 | | `POST /api/guide/feedback` | 写入反馈并关联当前导游 | | `POST /api/guide/account/cancellation` | 提交注销申请,不物理删除历史数据 | ## 字段与状态约束 - 页面 `serviceName` 对应订单 `packageName`,时长对应景区价格配置 `durationMinutes`。 - 页面人数统一使用订单 `peopleCount`;如需游客分组,必须建立真实分组模型,禁止从总人数虚构明细。 - 接单、开讲、结束时间分别对应 `acceptedAt`、`serviceStartedAt`、`completedAt`。 - 汇合点 ID、名称和经纬度来自 `operation_scenic_meeting_point`,不得依赖前端 mock 反查。 - 导游收入由后端结算规则计算并可追溯,前端不得自行按订单金额推算。 - API 返回后端标准订单枚举;导游端仅在 service 层转换为 `pending/accepted/arrived/serving/completed/canceled`。 - 实时状态应增加后端枚举或集中转换器,禁止在多层分别维护魔法数字。 ## 权限规则 - 所有 `/api/guide/**` 接口从登录主体取得 `guideId`,不得信任前端传入的导游 ID。 - 待接订单按景区服务范围、在线状态、可接状态和订单状态过滤。 - 接单使用数据库条件更新或事务锁,防止多个导游重复接取。 - 游客手机号按场景脱敏,仅服务中的订单提供必要联系能力。 - 身份证、证件图片和银行卡不得通过普通资料接口返回。 - 删除遵循现有逻辑删除规范,订单、评价和财务记录不得物理删除。 ## 实施顺序 1. 将资料和实时状态切换到现有真实接口。 2. 增加服务范围接口,替换景区和汇合点 mock。 3. 增加导游订单查询和状态流转,完成接单闭环。 4. 替换历史订单和订单详情本地数据。 5. 增加收益、评分并对齐后台财务与评价口径。 6. 补齐协议、反馈、换绑、资质重提和注销申请。 7. 删除对应 mock 和硬编码,并补充数据权限及状态流转测试。 ## 开发规则 - 页面只调用 `services/`,不直接写 `uni.request`。 - 优先复用现有 entity、mapper、service 和 DTO,仅为必要聚合新增导游端 response DTO。 - 每增加一个导游字段,先确认后台是否已经维护或展示该字段。 - 每增加一个状态操作,先定义前置状态、目标状态、操作者、时间字段和并发保护。 - 接口文档、前端适配和后端测试同步更新,不长期保留双轨 mock。