HOTEL_SCENIC_DEPLOYMENT.md 11 KB

酒店与景区模块联调说明

范围

本文档覆盖当前仓库内已经落地的两个业务模块:

  • business-hotel
  • business-scenic

适用场景:

  • 数据库初始化
  • 菜单权限导入
  • 后台管理端联调
  • 小程序接口联调
  • 微信支付联调前置检查

当前结论:

  • 两个模块都已经接入 jeesharp-business 聚合工程。
  • 后台 controller、application、service、mapper、SQL 脚本都已落地。
  • 小程序端接口已通过 business-mobile-gateway 挂出。
  • 酒店与景区支付回调入口、统一回调适配层、业务确认支付适配器都已落地。
  • “我的订单”聚合接口已纳入酒店与景区订单。

一、酒店模块

目录:

  • jeesharp-business/business-hotel

推荐 SQL 顺序:

  1. 01_schema.sql
  2. 02_seed.sql
  3. 03_menu_permission.sql
  4. 04_cleanup.sql 可选回滚

1. 后台能力

当前后台已具备以下对象管理能力:

  • 酒店管理
  • 房型管理
  • 预订单管理

菜单路径:

  • /business/hotel/stay
  • /business/hotel/room-type
  • /business/hotel/booking

对应后台接口子路径:

  • GET /manager/business/hotel/stay/v1/info
  • POST /manager/business/hotel/stay/v1/list
  • POST /manager/business/hotel/stay/v1/save
  • GET /manager/business/hotel/stay/v1/delete
  • GET /manager/business/hotel/roomType/v1/info
  • POST /manager/business/hotel/roomType/v1/list
  • POST /manager/business/hotel/roomType/v1/save
  • GET /manager/business/hotel/roomType/v1/delete
  • GET /manager/business/hotel/booking/v1/info
  • POST /manager/business/hotel/booking/v1/list
  • POST /manager/business/hotel/booking/v1/save
  • GET /manager/business/hotel/booking/v1/delete

说明:

  • 菜单路由仍然是 /business/hotel/room-type,但后台 controller 路径是 roomType/v1,这是当前代码中的实际实现。

2. 小程序能力

当前移动端接口挂载在:

  • ${jeesharp.web.mobilePath}/hotel

主要接口:

  • GET /mobile/hotel/stays
  • GET /mobile/hotel/stay/{id}
  • POST /mobile/hotel/booking/create
  • POST /mobile/hotel/booking/pay/prepare
  • GET /mobile/hotel/booking/pay/status/{orderId}
  • POST /mobile/hotel/booking/pay/mock-success
  • POST /mobile/hotel/booking/cancel
  • GET /mobile/hotel/booking/result/{orderId}

当前已经实现的业务行为:

  • 酒店列表与详情查询
  • 房型随酒店详情一起输出
  • 创建酒店业务预约单
  • 根据入住/离店日期、房型、间数计算支付金额
  • 生成支付业务字段:tradeOrderId / payOrderId / attach / amountFen
  • 查询支付状态
  • 模拟支付成功
  • 微信支付回调后确认支付
  • 取消未完成预订
  • 成功页按 orderId 回查结果

3. 当前支付接入状态

当前不是纯占位状态,已经具备以下能力:

  • HotelBookingOrderServiceImpl#preparePay(...) 会生成完整业务支付参数
  • HotelMobileController#payPrepare(...) 通过 WechatJsapiPayOrderPrepayService 创建财务支付单(biz_finance_pay_order)、调用 WechatMiniPayService.createPrepay(...) 并回填调起参数
  • 如果会员已登录且存在 memberId + appId + openid 绑定,会把 payer.openid 一起带上
  • 支付回调:TravelWechatPayNotifyMobileController/mobile/pay/notify/wechat,attach 路由)
  • 回调适配层已经接到 WechatPayNotifyAdapterService
  • 酒店业务确认支付适配器已经落地在 HotelWechatPayCallbackAdapter

二、景区门票模块

目录:

  • jeesharp-business/business-scenic

推荐 SQL 顺序:

  1. 01_schema.sql
  2. 02_seed.sql
  3. 03_menu_permission.sql
  4. 04_cleanup.sql 可选回滚

1. 后台能力

当前后台已具备以下对象管理能力:

  • 景区场馆管理
  • 景区预约单管理

菜单路径:

  • /business/scenic/venue
  • /business/scenic/booking

对应后台接口子路径:

  • GET /manager/business/scenic/venue/v1/info
  • POST /manager/business/scenic/venue/v1/list
  • POST /manager/business/scenic/venue/v1/save
  • GET /manager/business/scenic/venue/v1/delete
  • GET /manager/business/scenic/booking/v1/info
  • POST /manager/business/scenic/booking/v1/list
  • POST /manager/business/scenic/booking/v1/save
  • GET /manager/business/scenic/booking/v1/delete

2. 小程序能力

当前移动端接口挂载在:

  • ${jeesharp.web.mobilePath}/ticket/booking

主要接口:

  • GET /mobile/ticket/booking/venues
  • GET /mobile/ticket/booking/venue/{id}
  • POST /mobile/ticket/booking/create
  • POST /mobile/ticket/booking/pay/prepare
  • GET /mobile/ticket/booking/pay/status/{orderId}
  • POST /mobile/ticket/booking/pay/mock-success
  • POST /mobile/ticket/booking/cancel
  • GET /mobile/ticket/booking/result/{orderId}

当前已经实现的业务行为:

  • 场馆列表与详情查询
  • 免费预约:创建后进入 pending_use
  • 付费预约:创建后进入 pending_pay
  • 保存票档人数、出行人、金额明细
  • 生成支付业务字段:tradeOrderId / payOrderId / attach / amountFen
  • 查询支付状态
  • 模拟支付成功
  • 微信支付回调后确认支付
  • 取消未完成预约
  • 成功页按 orderId 回查结果

3. 当前支付接入状态

当前景区支付链路也已经超出“仅占位”阶段:

  • ScenicBookingOrderServiceImpl#preparePay(...) 已生成支付业务参数
  • ScenicMobileController#preparePay(...) 通过 WechatJsapiPayOrderPrepayService 创建财务支付单、调用 WechatMiniPayService.createPrepay(...) 并回填调起参数
  • 支付回调:TravelWechatPayNotifyMobileController/mobile/pay/notify/wechat,attach 路由)
  • 统一回调适配层已经接入 WechatPayNotifyAdapterService
  • 景区业务确认支付适配器已经落地在 ScenicWechatPayCallbackAdapter

三、后端挂载点

两个模块当前已经挂入以下工程:

  • jeesharp-business/pom.xml
  • jeesharp-business/business-mobile-gateway/pom.xml
  • web-starter/pom.xml

因此正常启动 web-starter 后,会同时暴露:

  • 后台管理接口
  • 小程序业务接口
  • 微信支付回调接口

支付相关公共组件当前在 business-mobile-gateway 内统一维护:

  • WechatJsapiPayOrderPrepayService(支付单 + 统一下单 + 回填 VO)
  • WechatPayNotifyAdapterService
  • HotelWechatPayCallbackAdapter
  • ScenicWechatPayCallbackAdapter
  • MallWechatPayCallbackAdapter
  • WECHAT_PAY_NOTIFY_SAMPLE.yml

财务侧支付单与支付流水在 business-financePayOrderApplicationServicePayRecordApplicationService(回调先更新支付单再落支付记录)。

四、订单聚合现状

当前“我的订单”聚合已经不是待办,已接入移动端订单接口:

  • GET /mobile/order/list
  • GET /mobile/order/{id}

当前会聚合三类订单:

  • 商城订单
  • 酒店预订单
  • 景区预约单

说明:

  • 这里是接口聚合,未接统一订单中心。
  • 酒店、景区、商城订单预支付均走 WechatJsapiPayOrderPrepayService(财务支付单 + 微信统一下单);酒店与景区仍各自维护业务单状态;商城订单支付状态见 mall_order.status

五、联调前检查

1. 菜单父级

两个模块的菜单 SQL 默认依赖:

  • sys_menu.parent_id = biz_root

如果现网父菜单不是 biz_root,执行前需要先修改:

  • 03_menu_permission.sql
  • 对应总菜单脚本

2. 角色授权

当前菜单 SQL 只负责:

  • 菜单
  • 按钮权限

不会自动给真实角色写入授权。

仍需:

  • 手动执行 sys_role_menu 授权
  • 或在后台角色管理中勾选

3. 静态资源

演示数据默认引用部分静态图片,如:

  • /static/images/home-hero-default.png(原 home-hero-banner.png / home-hero-ref.png 已合并)

如果现网不提供这些资源,需要改成真实 URL。

4. 微信小程序支付前置

要跑通真实 createPrepay(...),至少要满足:

  • wx.pay.jsapi.enabled=true
  • notify-base-url 配置正确
  • 商户私钥、平台公钥、api-v3-key 配置完整
  • 当前会员存在微信小程序登录态
  • app_member_oauth 中可查到 memberId + appId + openid

配置样例:

  • jeesharp-business/business-mobile-gateway/WECHAT_PAY_NOTIFY_SAMPLE.yml

5. 本地联调说明

本地联调时,如果没有完整微信支付配置,可使用:

  • pay/mock-success
  • wx.pay.jsapi.mock-fallback=true
  • wx.pay.notify.skip-signature-verify=true

但测试/生产环境不能依赖这些开发态设置。

六、联调顺序建议

酒店

  1. 执行酒店 SQL
  2. 在后台维护酒店与房型
  3. GET /mobile/hotel/staysGET /mobile/hotel/stay/{id} 校验数据
  4. POST /mobile/hotel/booking/create 创建业务单
  5. POST /mobile/hotel/booking/pay/prepare 验证预支付参数
  6. 本地先用 POST /mobile/hotel/booking/pay/mock-success 验证支付成功流转
  7. 核对 biz_finance_pay_order.notify_url.../mobile/pay/notify/wechat 并完成真实支付回调联调
  8. 最后用 GET /mobile/hotel/booking/result/{orderId}GET /mobile/order/{id} 校验结果

景区门票

  1. 执行景区 SQL
  2. 在后台维护场馆与票档 JSON
  3. GET /mobile/ticket/booking/venuesGET /mobile/ticket/booking/venue/{id} 校验数据
  4. 免费票验证创建后直接进入 pending_use
  5. 付费票验证创建后进入 pending_pay
  6. POST /mobile/ticket/booking/pay/prepare 验证预支付参数
  7. 本地先用 POST /mobile/ticket/booking/pay/mock-success 验证支付成功流转
  8. 核对 biz_finance_pay_order.notify_url.../mobile/pay/notify/wechat 并完成真实支付回调联调
  9. 最后用 GET /mobile/ticket/booking/result/{orderId}GET /mobile/order/{id} 校验结果

七、当前限制

酒店

已完成:

  • 业务单创建
  • 金额计算
  • 预支付参数生成
  • JSAPI 下单调用接入点
  • 支付状态查询
  • 模拟支付成功
  • 微信支付回调入口
  • 回调统一适配
  • 成功页回查

未完成或仍需加强:

  • 真实环境下的完整支付联调验证
  • 支付回调幂等保护的严格校验
  • 超时关单任务
  • 退款/售后流程
  • 与统一订单中心的正式打通

景区门票

已完成:

  • 免费预约闭环
  • 付费预约业务单创建
  • 预支付参数生成
  • JSAPI 下单调用接入点
  • 支付状态查询
  • 模拟支付成功
  • 微信支付回调入口
  • 回调统一适配
  • 成功页回查

未完成或仍需加强:

  • 真实环境下的完整支付联调验证
  • 支付回调幂等保护的严格校验
  • 超时关单任务
  • 退款/撤销能力
  • 与统一订单中心的正式打通

八、前端联调说明

当前仓库内已经明确了后端接口契约,但没有在本仓库直接检索到 pages/hotel/*pages/ticket/* 页面源码。

因此这里把以下路径视为小程序端联调约定,而不是当前仓库内现成资源:

  • pages/hotel/index
  • pages/hotel/detail
  • pages/hotel/book
  • pages/hotel/success
  • pages/ticket/index
  • pages/ticket/book
  • pages/ticket/success

如果联调使用的是外部小程序仓库,请以该仓库中的页面与 API 封装为准。

九、推荐下一步

按当前进度,优先建议:

  1. 用测试商户参数把酒店、景区两条真实微信支付链路各跑通一次
  2. 给酒店、景区回调补更严格的幂等与异常补偿
  3. 增加未支付超时关闭任务
  4. 明确是否要接统一订单中心,而不是继续双轨维护业务单
  5. 若进入运营阶段,再补退款、撤销、售后相关流程

如果只是做业务演示或后台联调,当前版本已经可以支撑酒店与景区的主流程联调。