当前位置: 首页 > news >正文

同城中台系统核心表设计与模块启用状态机(代码深讲)

县城创业者评估「同城中台系统」时,技术侧常纠结功能捆绑:是否必须一次启用全部业务域?下文用模块注册表、启用状态机与 Service 伪代码说明「统一中台 + 按需启用模块」如何落地,并给出低成本试水期的联调验收点。示例为教学示意。

设计目标:中台底座与业务模块解耦

核心思路:platform_module_registry记录可购模块;tenant_module_enable记录租户启用状态;公共域(用户、权限、营销)始终走中台服务,业务域按启用标记路由。

模块注册与启用表(示意)

CREATETABLEplatform_module_registry(idBIGINTPRIMARYKEYAUTO_INCREMENT,module_codeVARCHAR(32)NOTNULLUNIQUECOMMENT'RUNNER/ GROUPON / WAIMAI ...',module_nameVARCHAR(64)NOTNULL,versionVARCHAR(16)NOTNULL,created_atDATETIMENOTNULLDEFAULTCURRENT_TIMESTAMP);CREATETABLEtenant_module_enable(idBIGINTPRIMARYKEYAUTO_INCREMENT,tenant_idBIGINTNOTNULL,module_codeVARCHAR(32)NOTNULL,enable_statusTINYINTNOTNULLCOMMENT'0=DISABLED 1=ENABLED 2=TRIAL',enabled_atDATETIMENULL,UNIQUEKEYuk_tenant_module(tenant_id,module_code));CREATEINDEXidx_tenant_statusONtenant_module_enable(tenant_id,enable_status);

县城低成本试水可先写enable_status=2(TRIAL),仅开放单模块 API 路由;扩面再批量置1(ENABLED)。

模块启用状态机

DISABLED --(purchase)--> TRIAL --(acceptance)--> ENABLED ^ | +--------(rollback)-------+
  • DISABLED:模块未采购或未部署制品
  • TRIAL:试点租户可见,限账号/限区域
  • ENABLED:正式启用,走完整权限与导出策略

非法跳转(如 TRIAL 直接跳 ENABLED 且无验收记录)应由ModuleEnableService拒绝。

ModuleEnableService 伪代码(示意)

@ServicepublicclassModuleEnableService{publicvoidenableTrial(LongtenantId,StringmoduleCode,TrialScopescope){assertPurchased(tenantId,moduleCode);upsertStatus(tenantId,moduleCode,EnableStatus.TRIAL);routeRegistry.bindTrialScope(tenantId,moduleCode,scope);auditLog.record(tenantId,moduleCode,"TRIAL",scope);}publicvoidpromoteToEnabled(LongtenantId,StringmoduleCode,StringacceptanceRef){requireStatus(tenantId,moduleCode,EnableStatus.TRIAL);requireAcceptance(acceptanceRef);upsertStatus(tenantId,moduleCode,EnableStatus.ENABLED);routeRegistry.clearTrialScope(tenantId,moduleCode);auditLog.record(tenantId,moduleCode,"ENABLED",acceptanceRef);}}

TrialScope建议包含:试点区县、最大商家数、最大日订单量,写入附件便于验收。

公共能力共享:营销示例

中台marketing_campaign与用户user_id关联,不绑定单一module_code。新业务模块启用后,通过module_code过滤可用活动类型即可,无需重建优惠券引擎。

-- 活动适用模块(示意)CREATETABLEmarketing_campaign_module(campaign_idBIGINTNOTNULL,module_codeVARCHAR(32)NOTNULL,PRIMARYKEY(campaign_id,module_code));

这对应「中台新增营销能力,已购单模块与综合版可同步受益」的工程落点(以当期方案为准)。

网关路由与权限校验

API 网关根据tenant_module_enable动态路由:

# gateway route snippet (示意)-id:runner-apipredicates:-Path=/api/runner/**filters:-name:ModuleEnabledargs:moduleCode:RUNNERallowTrial:true

ModuleEnabled过滤器应读取租户启用状态;DISABLED 返回 403,TRIAL 超限返回 429 或业务错误码。

联调验收清单(低成本试水)

  1. 仅启用单模块时,其它模块 API 应 403
  2. TRIAL 账号越权访问非试点区域应失败
  3. 启用第二模块后,同一user_id可跨模块下单(若业务允许)
  4. 营销活动在marketing_campaign_module正确挂载
  5. 状态从 TRIAL 到 ENABLED 必须有acceptanceRef审计记录
  6. 导出任务按模块分表或分前缀,避免混库混导

与外包方案的对照:数据模型一致性

外包常见陷阱是第二个模块另起 user 表。中台方案应强制user_id全局唯一。验收 SQL:

SELECTu.id,COUNT(DISTINCTm.module_code)ASmodule_cntFROMuser_account uJOINuser_module_binding mONm.user_id=u.idWHEREu.tenant_id=:trialTenantGROUPBYu.idHAVINGmodule_cnt>=1;

试点用户至少在一个 module 有绑定;启用第二模块后同一user_id应出现第二条 binding,而不是新注册。

审计与回滚

CREATETABLEmodule_enable_audit(idBIGINTPRIMARYKEYAUTO_INCREMENT,tenant_idBIGINTNOTNULL,module_codeVARCHAR(32)NOTNULL,from_statusTINYINTNOTNULL,to_statusTINYINTNOTNULL,operatorVARCHAR(64)NOTNULL,ref_noVARCHAR(64)NULL,created_atDATETIMENOTNULL);

回滚 ENABLED→TRIAL 必须留 ref_no,避免生产误操作无迹可循。

网关 ModuleEnabled 过滤器伪代码

publicclassModuleEnabledFilterimplementsGlobalFilter{publicMono<Void>filter(ServerWebExchangeex,GatewayFilterChainchain){Stringcode=resolveModuleCode(ex.getRequest().getPath());EnableStatusst=enableService.status(tenantId(ex),code);if(st==DISABLED)returnforbidden(ex);if(st==TRIAL&&trialLimiter.exceeded(tenantId(ex),code))returntooManyRequests(ex);returnchain.filter(ex);}}

TRIAL 限流应覆盖日订单量与并发注册,写入TrialScope附件。

营销券跨模块挂载 REST(示意)

POST /internal/marketing/campaigns/{id}/modules {"moduleCodes":["GROUPON","WAIMAI"]}

仅 TENANT_ADMIN 可写;变更写 audit。县城试水首期可只挂一个 module_code。

导出任务分模块前缀(示意)

export/groupon/20260813/tenant_1001_orders.csv export/runner/20260813/tenant_1001_orders.csv

混导会导致财务对账把两条业务线算成一条,扩模块前务必约定前缀。

TRIAL 附件模板(示意)

tenant_id: 1001 module_code: GROUPON trial_city: 410000-xx max_merchants: 20 max_daily_orders: 200 acceptance_ref: ACC-20260813-001

promote 到 ENABLED 必须引用 acceptance_ref,否则审计链断裂。

纯技术小结

「同城中台系统」的功能捆绑焦虑,应转成模块注册、启用状态机与网关路由问题。光合同城按成品交付,支持单模块采购与后期叠加;公共域统一维护,业务域按需启用。县城创业者低成本试水时,优先验 TRIAL 边界与审计链,再扩 ENABLED。

http://www.jsqmd.com/news/1392706/

相关文章:

  • 通知,武汉三个区已经发通知领取评审表+资料袋
  • 别再一页页截图了,这款开源工具让你免费下载 Book118 文档
  • AI可以预测面试问题吗-AI反向押题法基于简历JD面经数据预测面试官会问什么
  • 沈阳皇姑区楼顶漏水怎么解决?2026 专业防水公司分享卫生间、楼顶、外墙、阳台 + 阳光房渗漏专业解决方案,一站式解决房屋漏水难题 - 超人防水
  • 动态规划专练:力扣第1035、392题
  • Tools原语深度解析:从定义到调用全流程
  • UPC码怎么用?亚马逊上架与编码管理完整指南
  • XML Schema 字符串数据类型详解
  • 2026年GIS三维软件公司推荐:这几家口碑好且专业 - 选型|行业|价格|案例
  • 别再翻页截图了:GetQzonehistory让QQ空间历史说说备份一次搞定
  • 合肥蜀山区楼顶漏水怎么解决?2026 专业防水公司分享卫生间、楼顶、外墙、阳台 + 阳光房渗漏专业解决方案,一站式解决房屋漏水难题 - 超人防水
  • fSpy-Blender 终极拆解:一张照片如何在几分钟内重建出透视精准的 3D 场景
  • 2026年拍卖平台行业发展白皮书 和拍网运营体系详解 - 起跑123
  • 眉山电脑回收哪家靠谱?先看这几点资质口碑判断心里有底 - 官方资讯
  • Agent 评测的数据飞轮:如何把 Good Case 和 Bad Case 变成回归资产
  • 被会员墙、广告弹窗、强制登录折磨了三年,这款开源下载工具让我彻底卸载了某雷
  • 2026年工业水处理药剂价格选型分析:代表性品牌推荐与趋势指南 - 全域品牌推荐
  • 2026 河北拍摄剪辑教学实体店短视频制作学习攻略 - 中国华商产业观察网
  • 深度 | Rubin Ultra 双芯重构:CoWoS-L 翘曲如何逼 NVIDIA 放弃 1TB 旗舰
  • 2026年,口碑好的成都整厂设备回收服务商揭秘! - 甄选测评馆
  • 对标 Claude Cowork:DeepSeek Harness 公测,同步开放插件生态
  • 同样克重黄金,天津有人多赚上千!2026交易逻辑很多人没弄懂 - 每日快报资讯
  • 提示词工程进阶——让大模型输出你想要的JSON格式
  • 成都榻榻米定制新选择,舒适实用打造理想家居空间 - 官方资讯
  • 猫抓浏览器资源嗅探扩展完整攻略:三步装上,轻松搞定网页视频与M3U8下载
  • 2026 河北短视频培训教学服装店主短视频运营提升方法 - 中国华商产业观察网
  • 死档激活需要什么手续?实操流程直接抄 - 趣闻早乐评
  • Elicitation原语:Server向Client请求用户输入
  • Uniswap V3 AMM核心原理:集中流动性与Tick数学
  • 【Logisim 本地搭建】手动版无符号 8 位乘法器的详细教程