海外版外卖模块单独买:模块边界与用户商家资料怎么划
东南亚华人创业团队做海外版外卖首期试点时技术评审里除了问「有哪些端」更该问「模块能不能单独关、用户商家资料边界划在哪」。若营销、第二语言、第二种支付与跑单层绑在同一张表结构里试运营想关某个模块就要动库扩第二城时商家和用户要从零重导低成本试水很快变成重复建设。下文从模块目录树、开关 YAML、用户商家资料表结构 边界说明「跑单层与扩展层拆开各管一块、用户商家资料全平台共用一份」怎么拆。示例为教学示意以光合同城当期海外交付为准。痛点开关只藏菜单用户商家资料却各存各的早期拼装方案常见结构外卖跑单层与营销模块共用wm_order表关营销要删字段或留脏数据第二城复制一套merchant_*表用户 ID 按城分叉扩城等于重新导资料语言包与支付通道写在同一配置命名空间切 locale 触发支付回归各端各自 UPDATE 订单状态后台关模块后定时任务仍在写库后果很直观试运营第三周总部想关优惠券发现coupon_id已写进订单主表非空约束开第二城运营要从 Excel 重新导商家。海外版外卖模块单独买若走统一后台一体化架构上应先收敛用户商家资料写路径与模块启停配置再谈 UI 有多少菜单。东南亚评审时可先问关扩展模块时跑单层订单链是否零改动用户/商家 ID 是否全平台唯一扩城是否只增city_code配置答不上来后面多半要反复花钱改表结构。模块目录树跑单层、扩展层、用户商家资料层overseas-wm-trial/ ├── apps/ │ ├── diner-app/ # 用户端下单、看进度 │ ├── merchant-app/ # 商家端接单、改价 │ ├── rider-app/ # 配送端取送状态 │ └── admin-console/ # 统一运营后台 ├── takeout-core/ # 跑单层首期必开 │ ├── order-hub/ # 订单唯一写入口 │ ├── catalog-snapshot/ # 下单时价格快照 │ └── fulfillment-bridge/ # 配送状态回写 ├── extension-plugins/ # 扩展层可关 │ ├── marketing-coupon/ │ ├── i18n-pack/ │ ├── payment-channel-b/ │ └── city-expansion/ ├── master-data/ # 主数据中台全模块只读引用 │ ├── user-master/ │ ├── merchant-master/ │ ├── org-tree/ # 总部—分站—门店 │ └── city-registry/ ├── payment-bridge/ # 支付回调只推进资金相关迁移 ├── authz/ │ ├── rbac-core/ │ └──>模块启停配置 YAML配置级启停# ops/module-switch.yaml示意version:2026-09-02modules:takeout_core:enabled:truerequired:truedescription:跑单层下单、接单、配送、导出marketing_coupon:enabled:falsedepends_on:[takeout_core]description:优惠券关时不写 order 主表i18n_secondary:enabled:falsedepends_on:[takeout_core]description:第二语言包与支付通道正交payment_channel_b:enabled:falsedepends_on:[takeout_core]description:第二种当地支付按需定制对接city_expansion:enabled:falsedepends_on:[takeout_core,master_data]description:第二城只增 city 配置不复制 merchant 表startup_rules:-if module.enabled false:skip:[consumers,schedulers,admin_menus]forbid:[alter_table_on_takeout_core]-if module.enabled true:require:[health_check_passed,depends_on_all_enabled]验收要点关marketing_coupon后POST /orders仍 200订单表无coupon_idNOT NULLAdmin 菜单消失但历史券数据可归档只读。用户商家资料边界全平台唯一 ID-- 用户主表不按城复制CREATETABLEmd_user(idBIGINTPRIMARYKEY,mobile_hashVARCHAR(64)NOTNULL,default_localeVARCHAR(8)NOTNULLDEFAULTth-TH,created_atDATETIMENOTNULL,UNIQUEKEYuk_mobile(mobile_hash));-- 商家主表city_code 是属性CREATETABLEmd_merchant(idBIGINTPRIMARYKEY,org_idBIGINTNOTNULL,city_codeVARCHAR(12)NOTNULL,nameVARCHAR(128)NOTNULL,statusVARCHAR(16)NOTNULL,INDEXidx_city(city_code,status));-- 城市注册表扩城只 INSERTCREATETABLEmd_city(city_codeVARCHAR(12)PRIMARYKEY,timezoneVARCHAR(32)NOTNULL,currencyCHAR(3)NOTNULL,enabledTINYINT(1)NOTNULLDEFAULT0);关键约束takeout-core订单表只存user_id、merchant_id外键禁止按城建wm_order_bkk、wm_order_hcm分表复制主数据。扩第二城流程INSERT md_city→ 改city-enable.yaml→ 现有商家可UPDATE city_code或新增门店节点不重新导用户。订单写路径扩展层事件订阅// takeout-core 下单命令示意publicOrderIdplaceOrder(PlaceOrderCmdcmd){validateModuleEnabled(takeout_core);UseruseruserMaster.get(cmd.userId());// 只读 master-dataMerchantmmerchantMaster.get(cmd.merchantId());OrderorderorderFactory.create(cmd,user,m);orderHub.persist(order);eventBus.publish(newOrderCreated(order.id()));// 扩展层可选订阅returnorder.id();}// marketing-coupon 订阅enabled 时才注册ConditionalOnModule(marketing_coupon)EventListenerpublicvoidonOrderCreated(OrderCreatede){// 仅写 coupon 侧表禁止 ALTER order 主表结构couponLedger.tryApply(e.orderId());}关marketing_coupon时Spring 不加载ConditionalOnModuleBean订单主链零改动。语言与支付正交配置# ops/i18n-payment-orthogonal.yaml示意i18n:default_locale:th-THpacks:-code:en-USenabled:falsepayment:channels:-id:psp_local_aenabled:truebinds_to:[order_id,channel_cfg_id]# 禁止 binds_to: locale-id:psp_local_benabled:falserules:-locale_change_must_not_recreate_payment_intent-sku_id_must_not_fork_by_language海外支付各国接口不同成品提供可配置能力与对接底座具体国家通道支持按需定制对接。切语言只换 message-key不重建 PaymentIntent。权限与数据范围扩城不扩权限漏洞# ops/role-grant.yaml示意roles:hq_operator:data_scope:all_citiescommands:[view_order,refund,export]city_operator:data_scope:assigned_citiescommands:[view_order,adjust_delivery_fee]store_manager:data_scope:assigned_merchantscommands:[accept_order,change_price]JWT Claims 携带city_codes、merchant_ids网关层过滤行级范围。扩城时只增assigned_cities不复制权限表。部署与验收清单部署示意配置外置module-switch.yaml、city-enable.yaml挂 ConfigMap 或 volume跑单层与扩展层可同进程通过ConditionalOnModule控制 Bean 加载首期 Docker Compose 即可第二城同一镜像改配置热启验收五项关marketing_coupon下单—接单—配送—导出仍通过开第二城不重新导md_user仅增md_city与商家city_code切en-US语言包已创建 PaymentIntent 的order_id不变分站账号看不见其它城订单data-scope 生效模块启停只改 YAML无需 ALTERtakeout-core表结构技术栈与运行时选型示意东南亚低成本试水不必一上来 K8s 多集群但模块边界应在一期就按「将来要叠模块」来建运行时Java 17 或 Node LTS 均可关键是order-hub与master-data独立进程或独立包配置中心首期可用 Git 管理 YAML不必强上 Nacosmodule-switch.yaml变更走 PR 评审数据库MySQL 8 单实例即可takeout-core与master-data可同库不同 schema禁止按城分库复制主表缓存Redis 可选订单状态以 DB 为准缓存只做读加速消息扩展层订阅可用本地 EventBus二期再换 MQ接口保持OrderCreated事件契约不变观测至少记录模块启停、城市开关、支付回调三条审计日志便于试运营排错评审时可要求供应商画出「关 marketing 时哪些 Bean 不加载」的启动日志样例口头说能关、启动仍加载消费者属于开关关不紧的高危信号。状态机与模块启停的协作订单状态机应只存在于takeout-core/order-hub扩展模块不得新增「并行状态字段」。例如优惠券模块可以写coupon_applied事件但不得在oh_order.status旁再挂coupon_status并与主状态竞态。# ops/state-transition.yaml节选示意transitions:-from:PAIDto:MERCHANT_ACCEPTEDactor:merchant-from:DELIVEREDto:COMPLETEDactor:systemforbidden_parallel_fields:-coupon_status_on_order_main-locale_on_payment_intent当marketing_coupon关闭时状态机图不变仅coupon_applied事件无消费者。这样验收时可以明确关模块等于关订阅而不是删状态。评审对话示例可直接用于会议问第二城上线要不要重新导用户 Excel期望答不需要。新增md_city行商家绑定city_code用户主表不动。问关优惠券后历史带券订单还能查吗期望答能。券侧表只读归档订单主链仍可导出只是新单不再写券事件。问加英文界面要不要重测所有支付期望答不要。locale 与channel_cfg_id正交回归范围只含 UI 与文案不含收单重建。问扩城时权限怎么加期望答给分站账号增assigned_cities不复制用户与权限表。若供应商回答「关模块要改表」或「加语言要重发支付版本」应写入风险项而不是留到上线后。常见反模式对照扩展层外键写进订单主表关模块要删列或留脏数据 → 应改为扩展表加事件订阅。按城复制商家表扩城必须重导资料 → 应改为 city_code 属性化主表不复制。locale 写入 PaymentIntent切语言会重建收单 → 应只绑定 order_id 与 channel_cfg_id。菜单隐藏但定时任务仍跑关模块后仍写库 → 应在 YAML 层停止 consumer。各端直连 UPDATE 订单多端状态对不齐 → 应统一走 command-api 写入口。与中台能力的关系光合同城海外版走统一后台一体化八大业务模块可单独采购takeout-core可与跑腿、同城团购等后续叠加用户商家资料共用、后台统一。统一后台侧补营销、权限、多语言等能力时已接入外卖可按方案受益。税务与申报各国不同字段与报表支持按需定制不默认某一国税制。商务结算规则由客户在当地自行确定系统提供可配置核对字段与导出不替代客户财务判断。试运营排错三类日志必留东南亚华人团队人手少海外版外卖模块单独买验收通过后仍建议在试运营保留三类日志便于判断「关模块是否真关」模块启停日志记录谁、何时、改了哪条module-switch.yaml以及重启后未加载的 Bean 列表。若关优惠券后日志仍出现CouponConsumer started说明开关只藏菜单。城市开关日志记录md_city.enabled变更与city-enable.yaml版本。扩第二城时应对照日志确认没有bulk import user类批任务。支付回调日志只记录order_id、channel_cfg_id、迁移前后支付状态不记录 locale。便于证明切语言未重建收单。这三类日志不必上昂贵 APM首期写文件或标准输出即可。关键是契约清晰方便总部与分站远程排错少飞现场。与跑腿模块叠加时的边界试水成功后常问「能不能在同底座加跑腿」答案取决于用户商家资料是否一期做对。若user-master、merchant-master全平台唯一加跑腿只需启用errand插件、执行增量 schema同一用户可下外卖单与跑腿单。若一期按城复制了用户表加跑腿等于又一次重复建设海外版外卖模块单独买省下的预算会在第二期还回去。评审时可要求供应商演示在同一测试用户下takeout与errand订单的user_id相同。这是中台底座是否真实的最低证据比 PPT 上的「可扩展」一词更硬。小结海外版外卖模块单独买的工程要点跑单层与扩展层表结构解耦用户商家资料全平台唯一 ID模块启停配置级、关扩展不动跑单层语言与支付正交。先把一城主链路和用户商家资料边界验收通过再开第二城或第二模块比一次全开再反复改表周期更短、返工更少。

相关新闻

基于SpringBoot和Vue的物联网仓储管理系统(毕业设计项目源码+文档)

基于SpringBoot和Vue的物联网仓储管理系统(毕业设计项目源码+文档)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/29 5:56:57 阅读更多 →
LLM智能与单任务成本:从预算失控到成本优化的实践指南

LLM智能与单任务成本:从预算失控到成本优化的实践指南

2024年底,我参与过一个给业务部门做 LLM Agent 方案的项目。团队当时定了一条很简单却代价很高的规则:所有任务一律用市面上能力最强的模型来跑。结果功能演示很顺利,一到真实业务量就卡住了——每天几千个任务,按 Token 一算&…

2026/8/29 5:56:57 阅读更多 →
基于SpringBoot和Vue的共享单车管理系统(毕业设计项目源码+文档)

基于SpringBoot和Vue的共享单车管理系统(毕业设计项目源码+文档)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/29 5:56:57 阅读更多 →

最新新闻

【单片机课程设计/毕业设计】基于语音交互的四分类智能垃圾桶检测控制系统设计 红外满溢预警语音识别智能垃圾分类系统设计(013105)

【单片机课程设计/毕业设计】基于语音交互的四分类智能垃圾桶检测控制系统设计 红外满溢预警语音识别智能垃圾分类系统设计(013105)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/8/29 6:33:06 阅读更多 →
DirectX着色器字节码交叉编译器深度解析

DirectX着色器字节码交叉编译器深度解析

简介:这是一套面向图形程序开发者的 DirectX 着色器字节码交叉编译工具库,专为 Unity 多平台着色器适配场景设计,解决 HLSL 编译产物(DXBC)向 OpenGL/GLSL、OpenGL ES、Vulkan(SPIR-V 前置 GLSL&#xff09…

2026/8/29 6:33:06 阅读更多 →
MATLAB数据拟合与回归分析实战:从原理到建模全流程解析

MATLAB数据拟合与回归分析实战:从原理到建模全流程解析

1. 从数据到洞察:数学建模中拟合与回归的核心价值在数学建模的实战中,我们拿到一堆数据后,最常面临的灵魂拷问就是:“这些数据背后藏着什么规律?” 无论是预测明天的客流量、分析药物剂量与疗效的关系,还是…

2026/8/29 6:33:06 阅读更多 →
【单片机课程设计/毕业设计】基于 STM32 单片机的多功能智能仓储柜体调控系统设计 基于 STM32 的温湿度与空气质量感知智能柜体设备控制系统(013005)

【单片机课程设计/毕业设计】基于 STM32 单片机的多功能智能仓储柜体调控系统设计 基于 STM32 的温湿度与空气质量感知智能柜体设备控制系统(013005)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/8/29 6:33:06 阅读更多 →
水下海洋生物检测系统实战:YOLOv8定制化部署指南

水下海洋生物检测系统实战:YOLOv8定制化部署指南

简介:水下目标检测是计算机视觉在特殊成像环境中的关键应用,其核心挑战源于海水对光的吸收散射导致的图像退化、低对比度与尺度失衡。理解水下成像物理模型是构建鲁棒检测系统的基础,而YOLOv8作为主流单阶段检测器,需针对性改造输…

2026/8/29 6:33:05 阅读更多 →
低秩字典学习:从稀疏表示到结构挖掘的进阶算法

低秩字典学习:从稀疏表示到结构挖掘的进阶算法

简介:本资源是面向图像处理与机器学习研究者的低秩字典学习(Low-Rank Dictionary Learning)开源实现,聚焦FDDL(Fast Dictionary Learning)算法在图像分类任务中的建模与优化。适用于具备线性代数、稀疏表示…

2026/8/29 6:32:05 阅读更多 →

日新闻

etc目录下的profile.d文件目录设置环境变量和全局脚本shell

etc目录下的profile.d文件目录设置环境变量和全局脚本shell

一、设置环境变量etc目录下的profile.d文件目录 /etc/profile.d1、编写 vi test.sh文件内容# jdk变量 export ZHK_HOME/root export PATH$PATH:$ZHK_HOME/test # 可以取出来ZHK_HOME变量给ZZZ_HOME赋值 export ZZZ_HOME${ZHK_HOME}/test2、刷新 执行source /etc/profile 命令使…

2026/8/29 0:00:24 阅读更多 →
【JavaScript】内存管理-垃圾回收机制-内存泄露

【JavaScript】内存管理-垃圾回收机制-内存泄露

内存管理 C 语言这样的底层语言一般都有底层的内存管理接口,比如 malloc()和free()。 而 JavaScript 是在创建变量(对象,字符串等)时自动进行了分配内存,并且在不使用它们时“自动”释放。释放的过程称为垃圾回收。 整…

2026/8/29 0:00:24 阅读更多 →
Labgrid-MCP:为嵌入式硬件实验室接入AI Agent操控能力

Labgrid-MCP:为嵌入式硬件实验室接入AI Agent操控能力

Labgrid-MCP 的目标是把 MCP(Model Context Protocol)能力延伸到真实嵌入式硬件实验室:AI Agent 通过一个标准化的 MCP Server,就能查看目标板状态、控制上电断电、复位开发板、读取串口日志,甚至执行镜像刷写。对于经…

2026/8/29 0:00:24 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/28 11:23:26 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/28 23:05:07 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/28 19:47:53 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/29 4:34:53 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/28 17:43:04 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/29 2:05:18 阅读更多 →