【研究与学习】菜某秘后台 SaaS 租户运营控制、费用管理系统
数据字典及功能设计方案详细文档
升鲜宝研发参考版 / 竞品推理版
|----------|-----------------------------------------------|
| 文档版本 | V1.0 |
| 生成日期 | 2024-05-08 |
| 适用对象 | 升鲜宝后台研发、产品经理、测试、运维、运营人员 |
| 设计范围 | SaaS 租户运营控制、套餐计费、费用账单、收款发票、服务管控、代理商分润、审计风控 |
| 重要说明 | 本文为基于公开功能与农批 SaaS 业务形态反推的竞品设计方案,不代表菜某秘官方内部设计。 |
目录
一、文档说明与设计边界
二、后台 SaaS 运营平台总体架构
三、租户运营控制功能设计
四、费用管理系统功能设计
五、关键业务流程
六、核心状态机与枚举
七、数据字典设计
八、接口与权限建议
九、审计风控与数据安全
十、升鲜宝落地实施路线
十一、测试验收清单
十二、参考资料
一、文档说明与设计边界
本文围绕"菜某秘后台 SaaS 运营控制、费用管理系统"进行产品与数据建模推理,目标是帮助升鲜宝研发团队设计一套可落地的 SaaS 运营后台。它不分析前台开单、库存、赊欠等档口业务细节,而聚焦平台方如何管理租户、套餐、版本、费用、账单、收款、发票、欠费控制、代理商分润和运营审计。
1.1 设计依据
菜某秘公开资料显示,其面向农贸批发配送行业,提供开单、赊欠、库存、代销结算、报表、打印、上下游对账等能力。由此可以推断,其后台 SaaS 运营系统至少需要支持租户开通、账号授权、套餐售卖、服务期限、功能控制、增值服务、费用结算、续费提醒、欠费停用和运营报表等能力。
1.2 本文设计原则
|--------|-------------------------------|----------------------------------------------|
| 原则 | 说明 | 落地要求 |
| 租户强隔离 | 平台运营、商户租户、代理商、终端档口数据边界清晰 | 所有核心业务表必须包含 tenant_id / merchant_id 或运营域隔离字段 |
| 套餐驱动功能 | 功能、资源、人数、设备、AI 识别次数等由套餐与增购项决定 | 采用 package + feature + quota + addon 模型 |
| 费用可追溯 | 每一笔费用从订单、账单、支付、发票到服务变更都能追踪 | 订单、账单、收款、核销、发票、退款独立建模 |
| 服务可控制 | 到期、欠费、超量、违规时可限制服务 | 租户状态机 + 服务控制策略 + 功能开关 |
| 运营可审计 | 员工改价、赠送、减免、退款、停用租户都必须留痕 | 高风险操作写入 audit 表并可审批 |
| 可扩展计费 | 支持按年、按月、按门店、按员工、按设备、按用量等模式 | 计费项抽象为 price_item 与 bill_item |
1.3 适用角色
|----------|------------------------|----------------------|
| 角色 | 关注点 | 核心功能 |
| 平台老板/管理层 | 整体收入、续费率、欠费、代理商业绩、客户增长 | 运营驾驶舱、收入报表、租户分布、续费分析 |
| 平台运营 | 租户开通、套餐调整、续费提醒、服务管控 | 租户管理、套餐授权、到期提醒、工单处理 |
| 销售/客服 | 商户成交、试用、报价、续费、客户服务 | 线索转租户、合同订单、续费跟进、客户标签 |
| 财务 | 账单、收款、发票、退款、对账 | 账单管理、收款核销、发票管理、退款审批 |
| 代理商 | 名下租户、佣金、回款、续费 | 代理商后台、分润结算、客户续费提醒 |
| 运维/技术 | 资源配额、服务状态、异常租户、数据安全 | 租户控制台、用量监控、操作审计、告警中心 |
二、后台 SaaS 运营平台总体架构
后台 SaaS 运营平台可以理解为"平台方管理所有商户租户的中台"。它与商户前台系统不同:前台解决档口老板如何开单经营,后台解决平台公司如何售卖、开通、计费、续费、控制、服务和审计。
2.1 功能架构总览
|----------|-----------------------------|---------------|
| 一级模块 | 二级功能 | 说明 |
| 租户管理中心 | 租户档案、门店档口、联系人、服务状态、租户标签 | 管理商户基本信息及生命周期 |
| 套餐版本中心 | 产品线、套餐、功能项、资源配额、增购项 | 定义平台售卖内容 |
| 订阅授权中心 | 试用、正式订阅、续费、升级、降级、暂停、恢复 | 控制租户可用服务 |
| 费用管理中心 | 报价、订单、合同、账单、账单明细、收款、核销 | 完成从销售到收款闭环 |
| 发票与退款中心 | 开票申请、发票、红冲、退款、退款审批 | 支撑财务合规 |
| 资源用量中心 | 员工数、门店数、设备数、存储、短信、AI次数、打印次数 | 支撑套餐超量和用量计费 |
| 服务控制中心 | 到期策略、欠费策略、超量策略、功能开关、强制停用 | 控制租户访问和功能能力 |
| 代理商分润中心 | 代理商档案、客户归属、佣金规则、分润账单、提现 | 支撑渠道销售 |
| 运营报表中心 | 收入、续费、欠费、套餐分布、租户活跃、代理商绩效 | 提供经营决策 |
| 审计风控中心 | 操作日志、导出日志、审批、敏感操作、异常登录 | 防止内部越权和数据泄露 |
2.2 推荐系统边界
|-----------|-------------------------------|----------------------|
| 系统 | 职责 | 不建议放入 |
| SaaS 运营后台 | 管理平台租户、套餐、费用、账单、服务控制、代理商、运营报表 | 商户日常销售开单、仓库盘点、客户赊欠明细 |
| 商户业务前台 | 商户自身开单、收款、库存、客户、货主、报表 | 平台方套餐、合同、代理商分润 |
| 支付/财务中台 | 收款渠道、支付流水、发票、退款、对账 | 租户具体库存和销售业务 |
| 消息中心 | 短信、站内信、微信通知、续费提醒、欠费提醒 | 业务规则判断本身 |
2.3 租户控制核心对象关系
建议用以下对象关系实现租户运营控制:
saas_tenant 租户
-> saas_subscription 订阅
-> saas_package 套餐版本
-> saas_package_feature 套餐功能项
-> saas_package_quota 套餐资源配额
-> saas_tenant_feature 租户功能授权
-> saas_tenant_quota 租户资源配额
-> saas_order 订购订单
-> fin_bill 账单
-> fin_bill_item 账单明细
-> fin_payment 收款记录
-> fin_invoice 发票
-> saas_service_control 服务控制策略
三、租户运营控制功能设计
3.1 租户档案管理
租户是 SaaS 平台的核心客户对象。一个租户通常代表一个农批商户或配送公司,租户下面可以有多个档口、门店、员工、设备、业务账号。
|---------|-------------------------------|--------------|
| 功能点 | 字段/规则 | 说明 |
| 新增租户 | 租户名称、联系人、手机号、行业、市场、地址、代理商、销售员 | 支持从销售线索转正式租户 |
| 租户资料维护 | 营业主体、统一社会信用代码、合同主体、发票抬头 | 服务财务合同与发票 |
| 租户状态管理 | 试用、正常、即将到期、欠费、暂停、停用、注销 | 影响前台登录与功能使用 |
| 租户标签 | 重点客户、高风险、欠费、渠道客户、试用客户 | 便于运营分层 |
| 租户归属 | 销售人员、客服人员、代理商、区域 | 影响提成和分润 |
| 租户备注与跟进 | 跟进记录、回访、续费意向、投诉记录 | 服务续费与客户成功 |
3.2 租户生命周期
|--------|--------------|--------------------------|---------------------|
| 阶段 | 触发条件 | 系统动作 | 关键控制 |
| 线索 | 销售录入或渠道导入 | 创建 customer_lead,不开通正式服务 | 可转试用或作废 |
| 试用 | 平台运营开通试用套餐 | 生成租户、试用订阅、临时授权 | 限制试用天数、门店数、员工数 |
| 正式 | 签约并完成首款或审批放行 | 转正式订阅,开放购买套餐功能 | 生成合同、订单、账单 |
| 即将到期 | 距离到期 N 天 | 提醒销售、运营、老板、租户管理员 | 可配置提前 30/15/7/3 天提醒 |
| 欠费 | 到期未续费或账单逾期 | 进入宽限期,功能部分限制 | 限制导出、AI、打印、增值服务 |
| 暂停 | 欠费超过宽限期或人工暂停 | 禁止普通员工登录,仅管理员可续费 | 保留数据,不删除 |
| 恢复 | 续费成功或人工恢复 | 恢复订阅状态和功能授权 | 记录恢复日志 |
| 注销 | 客户停用并完成数据处理 | 服务关闭,可归档数据 | 必须审批,防误删 |
3.3 服务状态与前台控制
|------------|----------|----------|--------------|-----------|
| 控制项 | 正常租户 | 即将到期 | 欠费宽限期 | 暂停/停用 |
| 登录 | 允许 | 允许并提示 | 允许管理员,限制普通员工 | 禁止普通员工登录 |
| 开单收银 | 允许 | 允许 | 可配置允许/禁止 | 禁止 |
| 数据查询 | 允许 | 允许 | 允许只读 | 只读或禁止 |
| 导出 | 允许但审计 | 允许但提示 | 默认禁止 | 禁止 |
| 打印 | 允许 | 允许 | 可配置限制云打印 | 禁止新增打印 |
| 短信/AI/增值服务 | 按配额 | 按配额 | 停止增值服务 | 停止 |
| 续费入口 | 可见 | 强提醒 | 强提醒 | 仅保留续费入口 |
3.4 功能开关与租户授权
功能开关用于控制租户是否能使用某个模块,例如语音开单、图片识别、货主小程序、飞鹅打印、客户账单分享、导出中心、报表中心等。建议设计为"套餐默认授权 + 租户个性化覆盖 + 临时授权"三层。
|---------|----------------------------|---------|
| 层级 | 说明 | 优先级 |
| 套餐默认授权 | 套餐中定义基础功能,如基础版不含代卖结算,高级版包含 | 低 |
| 租户个性化授权 | 平台运营可为单个租户单独打开/关闭功能 | 中 |
| 临时授权 | 售前试用、活动赠送、问题补偿等限时开放 | 高 |
| 风控强制关闭 | 欠费、违规、风险操作时强制关闭 | 最高 |
3.5 资源配额控制
资源配额是 SaaS 收费的基础。菜某秘这类系统可以围绕员工数、门店数、设备数、云打印次数、短信次数、AI 识别次数、存储空间、数据保留周期等做套餐分层。
|--------------|------------------|--------------|------------|
| 资源项 | 计量方式 | 超量策略 | 是否适合收费 |
| 员工账号数 | 按启用员工数 | 禁止新增或提示升级 | 适合 |
| 档口/门店数 | 按启用 shop 数 | 禁止新增或购买门店包 | 适合 |
| 电子秤/打印机设备数 | 按绑定设备数 | 禁止新增设备或购买设备包 | 适合 |
| 云打印次数 | 按月打印任务数 | 超量购买打印包 | 适合 |
| 短信条数 | 按发送成功条数 | 超量购买短信包 | 适合 |
| AI 语音/图片识别次数 | 按识别任务成功次数 | 超量购买 AI 包 | 适合 |
| 存储空间 | 附件、图片、PDF、导出文件大小 | 超量限制上传/导出 | 适合 |
| 数据保留期 | 按套餐保留 1/3/5 年 | 高级套餐延长 | 适合 |
四、费用管理系统功能设计
4.1 费用管理整体模型
费用管理系统建议采用"报价 → 订单 → 合同 → 账单 → 收款 → 核销 → 发票 → 服务变更"的主线。这样既能支撑销售成交,也能支撑财务对账和服务控制。
|--------|-----------------|-------------------------|
| 对象 | 含义 | 核心字段 |
| 报价单 | 销售给客户的价格方案,可多版本 | 客户、套餐、周期、折扣、赠送、有效期 |
| 订购订单 | 客户确认购买后生成订单 | 订单号、租户、套餐、金额、订单状态 |
| 合同 | 正式商务合同或电子协议 | 合同号、主体、开始结束时间、合同金额 |
| 账单 | 应收费用凭证,可由订单自动生成 | 账单号、应收金额、到期日、已收金额 |
| 账单明细 | 具体收费项 | 套餐费、员工包、门店包、短信包、AI 包、折扣 |
| 收款 | 实际收到的钱 | 支付方式、金额、流水号、收款人 |
| 核销 | 用收款冲销账单 | 账单、收款、核销金额 |
| 发票 | 开票申请与发票记录 | 抬头、税号、金额、状态 |
| 退款 | 退款申请、审核、执行 | 退款金额、原因、原订单/收款 |
4.2 收费模式设计
|----------|------------------|-----------------|-------------------|
| 收费模式 | 适用场景 | 计算方式 | 示例 |
| 按周期订阅 | 基础套餐 | 套餐价格 × 月/年 | 专业版 3999 元/年 |
| 按账号数 | 员工数量较多的商户 | 基础账号数免费,超出按人收费 | 超出 5 人后 50 元/人/月 |
| 按门店/档口数 | 连锁档口或多门店商户 | 基础门店数免费,超出按门店收费 | 每增加 1 个档口 500 元/年 |
| 按设备数 | 多电子秤、打印机、标签机 | 按绑定设备数量收费 | 每台云打印设备 100 元/年 |
| 按用量包 | 短信、AI、云打印、OCR | 购买次数包并扣减 | AI 图片识别 1000 次包 |
| 按功能增购 | 货主小程序、代卖结算、老板驾驶舱 | 单功能按年或一次性收费 | 货主通 1200 元/年 |
| 按实施服务 | 数据导入、培训、驻场、定制模板 | 一次性服务费 | 初始化服务 1000 元 |
| 按交易/撮合费 | 平台撮合或供应链金融 | 交易金额 × 费率 | 可作为高级扩展,不建议前期做重 |
4.3 套餐版本建议
|--------|-------------|-----------------------------|-------------------------|
| 套餐 | 目标客户 | 核心功能 | 限制建议 |
| 试用版 | 新线索、新商户体验 | 开单、客户、商品、基础报表 | 7-30 天;1 个档口;3 个员工;限制导出 |
| 基础版 | 小档口、自营批发 | 开单、收银、赊欠、基础库存、小票打印 | 1 个档口;5 员工;不含代卖与高级报表 |
| 专业版 | 成熟档口、配送商行 | 赊欠风控、批次库存、报表、飞鹅打印、账单分享 | 3 个档口;15 员工;含部分增值服务 |
| 旗舰版 | 多档口、代卖、水产批发 | 代卖结算、货主小程序、AI 开单、老板驾驶舱、导出审计 | 按资源配额控制,可增购 |
| 集团版 | 连锁、多组织、大客户 | 多组织、专属部署、API、数据权限、定制报表 | 合同定价,专属服务 |
4.4 费用类型字典
|-------------------|-------------------|------------|-------------|
| 费用类型 | 说明 | 是否参与账单 | 是否影响服务 |
| PACKAGE_FEE 套餐费 | 基础订阅套餐费用 | 是 | 是,到期影响服务 |
| ADDON_FEE 增购功能费 | 代卖结算、货主通、AI 开单等功能 | 是 | 是,欠费关闭对应功能 |
| RESOURCE_FEE 资源包费 | 员工包、门店包、设备包 | 是 | 是,超期/欠费影响资源 |
| USAGE_FEE 用量费 | 短信、AI、云打印、存储等用量 | 是 | 可影响增值服务 |
| IMPLEMENT_FEE 实施费 | 培训、数据导入、模板配置 | 是 | 否,一次性服务 |
| CUSTOM_FEE 定制开发费 | 个性化报表、接口、模板 | 是 | 视合同而定 |
| DISCOUNT 折扣 | 销售折扣、活动优惠 | 是,负数 | 否 |
| GIFT 赠送 | 赠送时长、赠送资源包 | 可入账为 0 | 是,影响授权 |
| PENALTY 违约/滞纳金 | 逾期或合同违约费用 | 可选 | 可选 |
4.5 订单与账单的关系
建议订单与账单分离。订单表达客户购买意图和销售成交结果,账单表达财务应收。一个订单可生成一个或多个账单;一个账单也可以包含多个账单明细。
|--------|---------------|------------------|
| 场景 | 订单处理 | 账单处理 |
| 新购套餐 | 生成订购订单 | 生成首期套餐账单 |
| 续费 | 生成续费订单 | 生成续费账单,更新订阅结束日期 |
| 升级套餐 | 生成升级订单 | 按剩余周期补差价生成账单 |
| 降级套餐 | 生成降级订单 | 可从下周期生效,原则上不自动退款 |
| 增购资源 | 生成增购订单 | 生成资源包账单并更新配额 |
| 赠送服务 | 生成 0 元订单或赠送记录 | 可不生成应收账单,但必须留审计 |
| 退款 | 关联原订单 | 生成退款单和负向财务记录 |
4.6 欠费与催缴
|--------|---------------------|--------------------|
| 策略 | 触发条件 | 系统动作 |
| 到期前提醒 | 距服务结束 30/15/7/3/1 天 | 提醒租户管理员、销售、客服、代理商 |
| 到期日提醒 | 服务到期当天 | 登录弹窗、短信/微信提醒、运营待办 |
| 宽限期 | 到期后 N 天内 | 允许核心业务使用,限制导出和增值服务 |
| 欠费限制 | 超过宽限期未续费 | 限制普通用户登录、禁止新增开单或只读 |
| 暂停服务 | 欠费超过阈值或人工暂停 | 仅保留续费入口与数据导出申请入口 |
| 数据保留 | 暂停后 N 天 | 数据只保留不删除,到期可归档 |
五、关键业务流程
5.1 新租户开通流程
- 销售创建线索
- 运营审核线索并创建租户
- 选择试用/正式套餐
- 生成订阅和功能授权
- 初始化默认档口、管理员账号、默认支付方式、打印模板
- 发送开通短信/微信通知
- 进入客户成功跟进计划
5.2 正式购买与首款流程
- 销售创建报价单,选择套餐、周期、增购项、折扣
- 客户确认后生成订购订单
- 如需合同,生成合同并上传签署文件
- 订单审核后生成应收账单
- 财务登记收款或对接在线支付
- 收款核销账单
- 订阅转正式或延长服务期
- 开票申请进入发票流程
5.3 续费流程
- 系统根据订阅结束日期生成续费提醒
- 销售/客服跟进客户续费意向
- 生成续费订单,可按原套餐或调整套餐
- 生成续费账单并收款
- 收款完成后延长 subscription_end_date
- 更新租户服务状态为正常
- 记录续费来源、销售员、代理商分润
5.4 升级/降级流程
|--------|------------------|-----------------|
| 流程 | 升级 | 降级 |
| 触发 | 客户购买更高套餐或更多资源 | 客户要求降低套餐 |
| 金额 | 按剩余周期计算补差价 | 通常下周期生效,不建议立即退款 |
| 授权 | 付款后立即增加功能和配额 | 到下周期调整功能和配额 |
| 审批 | 高折扣或补偿升级需审批 | 降级需提示功能关闭风险 |
| 日志 | 记录原套餐、新套餐、差价、操作人 | 记录影响功能、客户确认记录 |
5.5 退款流程
- 客服/销售提交退款申请,关联原订单、账单、收款
- 系统校验是否已开票、是否已使用服务、是否存在未结费用
- 主管/财务审批退款
- 如已开票,先走红冲或发票处理
- 财务执行退款并登记退款流水
- 系统按退款结果调整订阅、配额或服务状态
- 生成退款审计日志
5.6 代理商分润流程
- 租户绑定代理商和归属销售
- 客户付款并完成账单核销
- 系统按佣金规则计算待结佣金
- 达到结算周期后生成代理商分润账单
- 平台财务审核分润账单
- 付款给代理商并记录付款流水
- 代理商后台查看客户、续费和佣金
六、核心状态机与枚举
|---------------|--------|--------------|
| 枚举 | 值 | 说明 |
| tenant_status | 0 待开通 | 线索已转租户但未开通服务 |
| tenant_status | 1 试用中 | 试用套餐有效 |
| tenant_status | 2 正常 | 正式服务有效 |
| tenant_status | 3 即将到期 | 到期前提醒状态 |
| tenant_status | 4 欠费宽限 | 到期后宽限期 |
| tenant_status | 5 暂停 | 服务暂停,仅保留续费入口 |
| tenant_status | 6 停用 | 人工停用或长期欠费 |
| tenant_status | 9 注销 | 租户归档注销 |
|---------------------|-------|--------|
| 枚举 | 值 | 说明 |
| subscription_status | 0 草稿 | 未生效 |
| subscription_status | 1 试用 | 试用订阅 |
| subscription_status | 2 生效中 | 当前有效订阅 |
| subscription_status | 3 已到期 | 结束日期已过 |
| subscription_status | 4 已暂停 | 暂停服务 |
| subscription_status | 5 已取消 | 取消订阅 |
|--------------|-------|-------------|
| 枚举 | 值 | 说明 |
| order_status | 0 草稿 | 未提交 |
| order_status | 1 待审核 | 等待销售主管或财务审核 |
| order_status | 2 待付款 | 订单已确认,等待收款 |
| order_status | 3 已完成 | 已收款并生效 |
| order_status | 4 已取消 | 订单取消 |
| order_status | 5 已退款 | 订单全部或部分退款 |
|-------------|--------|--------|
| 枚举 | 值 | 说明 |
| bill_status | 0 未出账 | 账单草稿 |
| bill_status | 1 待收款 | 账单已生成 |
| bill_status | 2 部分收款 | 部分核销 |
| bill_status | 3 已结清 | 全部核销 |
| bill_status | 4 已逾期 | 超过应收日期 |
| bill_status | 5 已作废 | 账单取消 |
|----------------|-------|-------------|
| 枚举 | 值 | 说明 |
| invoice_status | 0 未申请 | 尚未开票 |
| invoice_status | 1 已申请 | 客户/销售提交开票申请 |
| invoice_status | 2 审核中 | 财务审核 |
| invoice_status | 3 已开票 | 发票已开具 |
| invoice_status | 4 已红冲 | 发票红冲 |
| invoice_status | 5 已驳回 | 开票申请驳回 |
七、数据字典设计
以下数据字典采用 MySQL 8.0 设计习惯,字段类型仅作为研发设计建议。实际落地时可按升鲜宝当前公共字段规范补充 tenant_id、create_by、update_by、deleted、version、trace_id 等字段。
ops_user:平台运营后台用户表
|-----------------|--------------|--------|--------|--------|--------------|
| 字段名 | 类型 | 必填 | 索引 | 说明 | 业务规则 |
| id | bigint | 是 | PK | 主键ID | 雪花ID或自增ID |
| username | varchar(64) | 是 | UK | 登录账号 | 全平台唯一 |
| password | varchar(255) | 是 | | 密码密文 | BCrypt/国密加密 |
| real_name | varchar(64) | 是 | | 姓名 | 用于审计显示 |
| phone | varchar(32) | 否 | IDX | 手机号 | 可用于登录和通知 |
| email | varchar(128) | 否 | | 邮箱 | 接收运营通知 |
| user_type | tinyint | 是 | IDX | 用户类型 | 1平台员工 2代理商员工 |
| agent_id | bigint | 否 | IDX | 代理商ID | 代理商员工必填 |
| status | tinyint | 是 | IDX | 状态 | 1正常 0禁用 |
| last_login_time | datetime | 否 | | 最后登录时间 | 审计 |
| create_time | datetime | 是 | | 创建时间 | 公共字段 |
ops_role:平台运营角色表
|------------|--------------|--------|--------|--------|---------------------|
| 字段名 | 类型 | 必填 | 索引 | 说明 | 业务规则 |
| id | bigint | 是 | PK | 角色ID | |
| role_code | varchar(64) | 是 | UK | 角色编码 | ADMIN/FINANCE/SALES |
| role_name | varchar(64) | 是 | | 角色名称 | |
| role_type | tinyint | 是 | IDX | 角色类型 | 1平台 2代理商 |
| data_scope | tinyint | 是 | | 数据范围 | 全部/部门/本人/代理商 |
| status | tinyint | 是 | | 状态 | |
| remark | varchar(255) | 否 | | 备注 | |
ops_menu:平台运营菜单权限表
|-----------------|--------------|--------|--------|--------|--------------------------|
| 字段名 | 类型 | 必填 | 索引 | 说明 | 业务规则 |
| id | bigint | 是 | PK | 菜单ID | |
| parent_id | bigint | 否 | IDX | 父级ID | 支持树形菜单 |
| menu_name | varchar(100) | 是 | | 菜单名称 | |
| permission_code | varchar(128) | 是 | UK | 权限编码 | tenant:add / bill:refund |
| menu_type | tinyint | 是 | | 类型 | 1目录 2菜单 3按钮 4接口 |
| route_path | varchar(255) | 否 | | 前端路由 | |
| component | varchar(255) | 否 | | 组件路径 | |
| sort_no | int | 否 | | 排序 | |
| visible | tinyint | 是 | | 是否显示 | |
| status | tinyint | 是 | | 状态 | |
saas_tenant:SaaS 租户主表
|--------------------|--------------|--------|--------|--------|-------------------|
| 字段名 | 类型 | 必填 | 索引 | 说明 | 业务规则 |
| id | bigint | 是 | PK | 租户ID | 平台租户唯一标识 |
| tenant_code | varchar(64) | 是 | UK | 租户编码 | 可用于子域名或客户编码 |
| tenant_name | varchar(128) | 是 | IDX | 租户名称 | 商户名称 |
| industry_type | tinyint | 是 | IDX | 行业类型 | 蔬菜/水果/水产/肉类/干货/综合 |
| contact_name | varchar(64) | 是 | | 联系人 | |
| contact_phone | varchar(32) | 是 | IDX | 联系电话 | |
| province | varchar(64) | 否 | | 省 | |
| city | varchar(64) | 否 | | 市 | |
| district | varchar(64) | 否 | | 区 | |
| address | varchar(255) | 否 | | 地址 | |
| agent_id | bigint | 否 | IDX | 代理商ID | 渠道归属 |
| sales_user_id | bigint | 否 | IDX | 销售人员ID | 平台销售归属 |
| service_status | tinyint | 是 | IDX | 服务状态 | 试用/正常/欠费/暂停/停用 |
| service_start_date | date | 否 | | 服务开始日期 | |
| service_end_date | date | 否 | IDX | 服务结束日期 | 续费提醒依据 |
| trial_end_date | date | 否 | | 试用结束日期 | |
| is_test_tenant | tinyint | 是 | | 是否测试租户 | 测试租户不计收入 |
| remark | varchar(500) | 否 | | 备注 | |
| create_time | datetime | 是 | | 创建时间 | |
saas_tenant_profile:租户扩展资料表
|----------------------|--------------|--------|--------|------------|----------|
| 字段名 | 类型 | 必填 | 索引 | 说明 | 业务规则 |
| tenant_id | bigint | 是 | PK/FK | 租户ID | 一对一 |
| company_name | varchar(128) | 否 | | 合同主体名称 | |
| credit_code | varchar(64) | 否 | | 统一社会信用代码 | |
| invoice_title | varchar(128) | 否 | | 默认发票抬头 | |
| tax_no | varchar(64) | 否 | | 税号 | |
| bank_name | varchar(128) | 否 | | 开户行 | |
| bank_account | varchar(128) | 否 | | 银行账号 | |
| business_license_url | varchar(500) | 否 | | 营业执照附件 | |
| customer_success_id | bigint | 否 | IDX | 客服/客户成功负责人 | |
saas_tenant_contact:租户联系人表
|------------------------|--------------|--------|--------|--------|-----------|
| 字段名 | 类型 | 必填 | 索引 | 说明 | 业务规则 |
| id | bigint | 是 | PK | 主键 | |
| tenant_id | bigint | 是 | IDX | 租户ID | |
| contact_name | varchar(64) | 是 | | 联系人 | |
| contact_role | varchar(64) | 否 | | 角色 | 老板/财务/管理员 |
| phone | varchar(32) | 是 | IDX | 手机号 | |
| wechat | varchar(64) | 否 | | 微信号 | |
| email | varchar(128) | 否 | | 邮箱 | |
| is_primary | tinyint | 是 | | 是否主联系人 | |
| receive_billing_notice | tinyint | 是 | | 接收账单提醒 | |
| receive_service_notice | tinyint | 是 | | 接收服务提醒 | |
saas_product_line:SaaS 产品线表
|--------------|--------------|--------|--------|--------|---------------------|
| 字段名 | 类型 | 必填 | 索引 | 说明 | 业务规则 |
| id | bigint | 是 | PK | 产品线ID | |
| product_code | varchar(64) | 是 | UK | 产品编码 | CAIXM_POS / SXB_SCM |
| product_name | varchar(128) | 是 | | 产品名称 | 菜某秘农批版/升鲜宝水产宝 |
| description | varchar(500) | 否 | | 说明 | |
| status | tinyint | 是 | | 状态 | |
saas_feature:功能项定义表
|-----------------|--------------|--------|--------|--------|----------------------------|
| 字段名 | 类型 | 必填 | 索引 | 说明 | 业务规则 |
| id | bigint | 是 | PK | 功能项ID | |
| product_id | bigint | 是 | IDX | 产品线ID | |
| feature_code | varchar(128) | 是 | UK | 功能编码 | ORDER_VOICE / OWNER_SETTLE |
| feature_name | varchar(128) | 是 | | 功能名称 | 语音开单/货主结算 |
| feature_group | varchar(64) | 否 | IDX | 功能分组 | 开单/库存/报表/硬件 |
| feature_type | tinyint | 是 | | 类型 | 1菜单 2按钮 3接口 4资源 5增值服务 |
| default_enabled | tinyint | 是 | | 默认启用 | |
| description | varchar(500) | 否 | | 说明 | |
saas_package:套餐版本表
|---------------|---------------|--------|--------|--------|--------------------------|
| 字段名 | 类型 | 必填 | 索引 | 说明 | 业务规则 |
| id | bigint | 是 | PK | 套餐ID | |
| product_id | bigint | 是 | IDX | 产品线ID | |
| package_code | varchar(64) | 是 | UK | 套餐编码 | TRIAL/BASIC/PRO/ULTIMATE |
| package_name | varchar(128) | 是 | | 套餐名称 | 试用版/基础版/专业版/旗舰版 |
| package_level | int | 是 | IDX | 套餐级别 | 用于升级降级比较 |
| billing_cycle | tinyint | 是 | | 默认周期 | 1月 2季 3年 |
| base_price | decimal(18,2) | 是 | | 基础价格 | 展示价格 |
| trial_days | int | 否 | | 试用天数 | 试用套餐使用 |
| status | tinyint | 是 | | 状态 | 上架/下架 |
| sort_no | int | 否 | | 排序 | |
saas_package_feature:套餐功能授权表
|-------------|--------------|--------|--------|--------|---------------|
| 字段名 | 类型 | 必填 | 索引 | 说明 | 业务规则 |
| id | bigint | 是 | PK | 主键 | |
| package_id | bigint | 是 | IDX | 套餐ID | |
| feature_id | bigint | 是 | IDX | 功能项ID | |
| enabled | tinyint | 是 | | 是否启用 | |
| limit_value | varchar(64) | 否 | | 限制值 | 如仅允许查看 3 个月数据 |
| remark | varchar(255) | 否 | | 备注 | |
saas_quota_item:资源配额项定义表
|-------------------|--------------|--------|--------|--------|--------------------------------|
| 字段名 | 类型 | 必填 | 索引 | 说明 | 业务规则 |
| id | bigint | 是 | PK | 配额项ID | |
| quota_code | varchar(64) | 是 | UK | 配额编码 | USER_COUNT/SHOP_COUNT/AI_COUNT |
| quota_name | varchar(128) | 是 | | 配额名称 | 员工数/门店数/AI识别次数 |
| quota_type | tinyint | 是 | | 类型 | 1数量上限 2用量次数 3存储容量 |
| unit_name | varchar(32) | 是 | | 单位 | 人/个/次/MB |
| reset_cycle | tinyint | 是 | | 重置周期 | 0不重置 1月 2年 |
| over_limit_policy | tinyint | 是 | | 超量策略 | 提醒/禁止/允许后计费 |
saas_package_quota:套餐资源配额表
|---------------|---------------|--------|--------|--------|-------------|
| 字段名 | 类型 | 必填 | 索引 | 说明 | 业务规则 |
| id | bigint | 是 | PK | 主键 | |
| package_id | bigint | 是 | IDX | 套餐ID | |
| quota_item_id | bigint | 是 | IDX | 配额项ID | |
| quota_value | decimal(18,4) | 是 | | 配额值 | 如 5 人、3 个门店 |
| overage_price | decimal(18,4) | 否 | | 超量单价 | 允许超量计费时使用 |
saas_addon:增购项定义表
|--------------------|---------------|--------|--------|--------|-----------------------------|
| 字段名 | 类型 | 必填 | 索引 | 说明 | 业务规则 |
| id | bigint | 是 | PK | 增购项ID | |
| addon_code | varchar(64) | 是 | UK | 增购编码 | AI_PACK/SHOP_PACK/OWNER_APP |
| addon_name | varchar(128) | 是 | | 增购名称 | AI识别包/门店包/货主小程序 |
| addon_type | tinyint | 是 | IDX | 类型 | 1功能 2资源包 3服务 |
| price | decimal(18,2) | 是 | | 价格 | 标准价格 |
| billing_cycle | tinyint | 是 | | 收费周期 | 一次性/月/年 |
| related_feature_id | bigint | 否 | | 关联功能 | 功能型增购使用 |
| related_quota_id | bigint | 否 | | 关联配额 | 资源包使用 |
| quota_value | decimal(18,4) | 否 | | 增加配额值 | |
| status | tinyint | 是 | | 状态 | |
saas_subscription:租户订阅表
|-------------------|-------------|--------|--------|--------|----------------|
| 字段名 | 类型 | 必填 | 索引 | 说明 | 业务规则 |
| id | bigint | 是 | PK | 订阅ID | |
| tenant_id | bigint | 是 | IDX | 租户ID | |
| product_id | bigint | 是 | IDX | 产品线ID | |
| package_id | bigint | 是 | IDX | 套餐ID | |
| subscription_no | varchar(64) | 是 | UK | 订阅编号 | |
| subscription_type | tinyint | 是 | | 订阅类型 | 试用/正式/赠送 |
| start_date | date | 是 | IDX | 开始日期 | |
| end_date | date | 是 | IDX | 结束日期 | 服务控制依据 |
| status | tinyint | 是 | IDX | 订阅状态 | 草稿/试用/生效/到期/暂停 |
| auto_renew | tinyint | 是 | | 是否自动续费 | |
| source_order_id | bigint | 否 | IDX | 来源订单ID | |
| create_time | datetime | 是 | | 创建时间 | |
saas_tenant_feature:租户功能授权表
|---------------|--------------|--------|--------|--------|----------------|
| 字段名 | 类型 | 必填 | 索引 | 说明 | 业务规则 |
| id | bigint | 是 | PK | 主键 | |
| tenant_id | bigint | 是 | IDX | 租户ID | |
| feature_id | bigint | 是 | IDX | 功能项ID | |
| enabled | tinyint | 是 | | 是否启用 | 最终生效结果 |
| source_type | tinyint | 是 | | 来源 | 套餐/增购/赠送/人工/风控 |
| start_time | datetime | 否 | | 开始时间 | |
| end_time | datetime | 否 | | 结束时间 | 临时授权 |
| override_flag | tinyint | 是 | | 是否覆盖套餐 | |
| remark | varchar(255) | 否 | | 备注 | |
saas_tenant_quota:租户资源配额表
|-----------------|---------------|--------|--------|--------|----------|
| 字段名 | 类型 | 必填 | 索引 | 说明 | 业务规则 |
| id | bigint | 是 | PK | 主键 | |
| tenant_id | bigint | 是 | IDX | 租户ID | |
| quota_item_id | bigint | 是 | IDX | 配额项ID | |
| quota_value | decimal(18,4) | 是 | | 总配额 | 套餐+增购+赠送 |
| used_value | decimal(18,4) | 是 | | 已使用量 | 实时或定时统计 |
| available_value | decimal(18,4) | 是 | | 可用量 | 总配额-已使用 |
| reset_cycle | tinyint | 是 | | 重置周期 | 继承配额项 |
| last_reset_time | datetime | 否 | | 最近重置时间 | |
| status | tinyint | 是 | | 状态 | |
saas_usage_record:资源用量流水表
|---------------|---------------|--------|--------|--------|----------------------|
| 字段名 | 类型 | 必填 | 索引 | 说明 | 业务规则 |
| id | bigint | 是 | PK | 主键 | |
| tenant_id | bigint | 是 | IDX | 租户ID | |
| quota_item_id | bigint | 是 | IDX | 配额项ID | |
| usage_no | varchar(64) | 是 | UK | 用量流水号 | 幂等使用 |
| biz_type | varchar(64) | 是 | IDX | 业务类型 | SMS/AI/PRINT/STORAGE |
| biz_id | bigint | 否 | | 业务ID | |
| usage_value | decimal(18,4) | 是 | | 使用量 | |
| billing_flag | tinyint | 是 | | 是否计费 | |
| usage_time | datetime | 是 | IDX | 使用时间 | |
saas_order:SaaS 订购订单表
|-----------------|---------------|--------|--------|--------|----------------|
| 字段名 | 类型 | 必填 | 索引 | 说明 | 业务规则 |
| id | bigint | 是 | PK | 订单ID | |
| order_no | varchar(64) | 是 | UK | 订单号 | |
| tenant_id | bigint | 是 | IDX | 租户ID | |
| order_type | tinyint | 是 | IDX | 订单类型 | 新购/续费/升级/增购/退款 |
| package_id | bigint | 否 | IDX | 套餐ID | 套餐订单使用 |
| subscription_id | bigint | 否 | IDX | 订阅ID | 续费升级使用 |
| sales_user_id | bigint | 否 | IDX | 销售人员 | |
| agent_id | bigint | 否 | IDX | 代理商ID | |
| order_amount | decimal(18,2) | 是 | | 订单原价 | |
| discount_amount | decimal(18,2) | 是 | | 折扣金额 | |
| payable_amount | decimal(18,2) | 是 | | 应付金额 | |
| paid_amount | decimal(18,2) | 是 | | 已付金额 | |
| order_status | tinyint | 是 | IDX | 订单状态 | 草稿/待审核/待付款/已完成 |
| effective_type | tinyint | 是 | | 生效方式 | 立即/付款后/指定日期 |
| effective_date | date | 否 | | 生效日期 | |
| remark | varchar(500) | 否 | | 备注 | |
| create_time | datetime | 是 | | 创建时间 | |
saas_order_item:SaaS 订单明细表
|--------------------|---------------|--------|--------|-----------|-----------------|
| 字段名 | 类型 | 必填 | 索引 | 说明 | 业务规则 |
| id | bigint | 是 | PK | 主键 | |
| order_id | bigint | 是 | IDX | 订单ID | |
| item_type | tinyint | 是 | IDX | 明细类型 | 套餐/增购/资源包/服务/折扣 |
| item_code | varchar(64) | 是 | | 项目编码 | |
| item_name | varchar(128) | 是 | | 项目名称 | |
| quantity | decimal(18,4) | 是 | | 数量 | |
| unit_price | decimal(18,2) | 是 | | 单价 | |
| amount | decimal(18,2) | 是 | | 金额 | |
| service_start_date | date | 否 | | 服务开始 | |
| service_end_date | date | 否 | | 服务结束 | |
| related_id | bigint | 否 | | 关联套餐/增购ID | |
saas_contract:合同表
|-----------------|---------------|--------|--------|--------|----------|
| 字段名 | 类型 | 必填 | 索引 | 说明 | 业务规则 |
| id | bigint | 是 | PK | 合同ID | |
| contract_no | varchar(64) | 是 | UK | 合同编号 | |
| tenant_id | bigint | 是 | IDX | 租户ID | |
| order_id | bigint | 否 | IDX | 关联订单 | |
| contract_name | varchar(128) | 是 | | 合同名称 | |
| party_a | varchar(128) | 是 | | 甲方 | 客户主体 |
| party_b | varchar(128) | 是 | | 乙方 | 平台主体 |
| contract_amount | decimal(18,2) | 是 | | 合同金额 | |
| start_date | date | 是 | | 开始日期 | |
| end_date | date | 是 | | 结束日期 | |
| sign_status | tinyint | 是 | IDX | 签署状态 | 待签/已签/作废 |
| file_url | varchar(500) | 否 | | 合同附件 | |
fin_bill:平台应收账单表
|-----------------|---------------|--------|--------|--------|----------------|
| 字段名 | 类型 | 必填 | 索引 | 说明 | 业务规则 |
| id | bigint | 是 | PK | 账单ID | |
| bill_no | varchar(64) | 是 | UK | 账单号 | |
| tenant_id | bigint | 是 | IDX | 租户ID | |
| order_id | bigint | 否 | IDX | 来源订单ID | |
| contract_id | bigint | 否 | IDX | 合同ID | |
| bill_type | tinyint | 是 | IDX | 账单类型 | 套餐/增购/用量/实施/退款 |
| bill_date | date | 是 | | 账单日期 | |
| due_date | date | 是 | IDX | 应收日期 | 逾期判断 |
| bill_amount | decimal(18,2) | 是 | | 账单金额 | |
| received_amount | decimal(18,2) | 是 | | 已收金额 | |
| discount_amount | decimal(18,2) | 是 | | 优惠金额 | |
| balance_amount | decimal(18,2) | 是 | | 未收金额 | |
| bill_status | tinyint | 是 | IDX | 账单状态 | 待收/部分收/已结清/逾期 |
| overdue_days | int | 否 | | 逾期天数 | 定时任务更新 |
| create_time | datetime | 是 | | 创建时间 | |
fin_bill_item:账单明细表
|----------------|---------------|--------|--------|--------|-----------------------|
| 字段名 | 类型 | 必填 | 索引 | 说明 | 业务规则 |
| id | bigint | 是 | PK | 主键 | |
| bill_id | bigint | 是 | IDX | 账单ID | |
| fee_type | varchar(64) | 是 | IDX | 费用类型 | PACKAGE_FEE/ADDON_FEE |
| item_name | varchar(128) | 是 | | 费用名称 | |
| quantity | decimal(18,4) | 是 | | 数量 | |
| unit_price | decimal(18,2) | 是 | | 单价 | |
| amount | decimal(18,2) | 是 | | 金额 | |
| tax_rate | decimal(10,4) | 否 | | 税率 | |
| tax_amount | decimal(18,2) | 否 | | 税额 | |
| service_period | varchar(64) | 否 | | 服务期间 | 如 2026-01~2026-12 |
fin_payment:平台收款记录表
|--------------------|---------------|--------|--------|--------|-----------------|
| 字段名 | 类型 | 必填 | 索引 | 说明 | 业务规则 |
| id | bigint | 是 | PK | 收款ID | |
| payment_no | varchar(64) | 是 | UK | 收款单号 | |
| tenant_id | bigint | 是 | IDX | 租户ID | |
| payer_name | varchar(128) | 否 | | 付款方 | |
| pay_method | tinyint | 是 | IDX | 支付方式 | 现金/转账/微信/支付宝/线上 |
| pay_amount | decimal(18,2) | 是 | | 收款金额 | |
| pay_time | datetime | 是 | IDX | 收款时间 | |
| transaction_no | varchar(128) | 否 | IDX | 外部交易号 | 支付渠道流水 |
| receive_account_id | bigint | 否 | | 收款账户ID | |
| payment_status | tinyint | 是 | IDX | 收款状态 | 正常/撤销/退款 |
| operator_id | bigint | 是 | IDX | 登记人 | |
| remark | varchar(500) | 否 | | 备注 | |
fin_bill_writeoff:账单收款核销表
|-----------------|---------------|--------|--------|--------|----------|
| 字段名 | 类型 | 必填 | 索引 | 说明 | 业务规则 |
| id | bigint | 是 | PK | 核销ID | |
| bill_id | bigint | 是 | IDX | 账单ID | |
| payment_id | bigint | 是 | IDX | 收款ID | |
| writeoff_amount | decimal(18,2) | 是 | | 核销金额 | |
| writeoff_time | datetime | 是 | | 核销时间 | |
| operator_id | bigint | 是 | | 操作人 | |
fin_invoice:发票表
|----------------|---------------|--------|--------|--------|-------------|
| 字段名 | 类型 | 必填 | 索引 | 说明 | 业务规则 |
| id | bigint | 是 | PK | 发票ID | |
| invoice_no | varchar(64) | 否 | UK | 发票号码 | 开票后回填 |
| apply_no | varchar(64) | 是 | UK | 开票申请号 | |
| tenant_id | bigint | 是 | IDX | 租户ID | |
| bill_id | bigint | 否 | IDX | 账单ID | |
| invoice_type | tinyint | 是 | | 发票类型 | 普票/专票/电子票 |
| title | varchar(128) | 是 | | 发票抬头 | |
| tax_no | varchar(64) | 是 | | 税号 | |
| invoice_amount | decimal(18,2) | 是 | | 开票金额 | |
| invoice_status | tinyint | 是 | IDX | 发票状态 | 申请/审核/已开/红冲 |
| apply_user_id | bigint | 是 | | 申请人 | |
| invoice_time | datetime | 否 | | 开票时间 | |
| file_url | varchar(500) | 否 | | 发票附件 | |
fin_refund:退款单表
|---------------|---------------|--------|--------|--------|-------------|
| 字段名 | 类型 | 必填 | 索引 | 说明 | 业务规则 |
| id | bigint | 是 | PK | 退款ID | |
| refund_no | varchar(64) | 是 | UK | 退款单号 | |
| tenant_id | bigint | 是 | IDX | 租户ID | |
| order_id | bigint | 否 | IDX | 原订单ID | |
| payment_id | bigint | 否 | IDX | 原收款ID | |
| refund_amount | decimal(18,2) | 是 | | 退款金额 | |
| refund_reason | varchar(500) | 是 | | 退款原因 | |
| refund_status | tinyint | 是 | IDX | 退款状态 | 申请/审批/已退/驳回 |
| apply_user_id | bigint | 是 | | 申请人 | |
| audit_user_id | bigint | 否 | | 审核人 | |
| refund_time | datetime | 否 | | 退款时间 | |
saas_service_control:租户服务控制表
|----------------|--------------|--------|--------|--------|----------------|
| 字段名 | 类型 | 必填 | 索引 | 说明 | 业务规则 |
| id | bigint | 是 | PK | 主键 | |
| tenant_id | bigint | 是 | IDX | 租户ID | |
| control_type | tinyint | 是 | IDX | 控制类型 | 到期/欠费/超量/人工/风控 |
| control_level | tinyint | 是 | | 控制级别 | 提醒/限制/暂停/停用 |
| control_status | tinyint | 是 | IDX | 状态 | 生效/解除 |
| reason | varchar(500) | 是 | | 原因 | |
| start_time | datetime | 是 | | 开始时间 | |
| end_time | datetime | 否 | | 结束时间 | |
| operator_id | bigint | 否 | | 操作人 | 系统任务可为空 |
saas_tenant_status_log:租户状态变更日志表
|---------------|--------------|--------|--------|--------|---------------|
| 字段名 | 类型 | 必填 | 索引 | 说明 | 业务规则 |
| id | bigint | 是 | PK | 主键 | |
| tenant_id | bigint | 是 | IDX | 租户ID | |
| before_status | tinyint | 是 | | 变更前状态 | |
| after_status | tinyint | 是 | IDX | 变更后状态 | |
| change_reason | varchar(500) | 是 | | 变更原因 | |
| source_type | tinyint | 是 | | 来源 | 系统任务/人工/支付/审批 |
| source_id | bigint | 否 | | 来源ID | |
| operator_id | bigint | 否 | | 操作人 | |
| create_time | datetime | 是 | IDX | 创建时间 | |
agent_partner:代理商表
|--------------------|--------------|--------|--------|--------|----------|
| 字段名 | 类型 | 必填 | 索引 | 说明 | 业务规则 |
| id | bigint | 是 | PK | 代理商ID | |
| agent_code | varchar(64) | 是 | UK | 代理商编码 | |
| agent_name | varchar(128) | 是 | IDX | 代理商名称 | |
| contact_name | varchar(64) | 是 | | 联系人 | |
| contact_phone | varchar(32) | 是 | | 联系电话 | |
| region_code | varchar(64) | 否 | IDX | 区域编码 | |
| commission_rule_id | bigint | 否 | | 默认佣金规则 | |
| status | tinyint | 是 | IDX | 状态 | |
| settlement_account | varchar(128) | 否 | | 结算账户 | |
agent_commission_rule:代理商佣金规则表
|-----------------|---------------|--------|--------|--------|-------------|
| 字段名 | 类型 | 必填 | 索引 | 说明 | 业务规则 |
| id | bigint | 是 | PK | 规则ID | |
| rule_name | varchar(128) | 是 | | 规则名称 | |
| rule_type | tinyint | 是 | | 规则类型 | 固定比例/阶梯/按套餐 |
| commission_rate | decimal(10,4) | 否 | | 佣金比例 | |
| effective_start | date | 是 | | 生效开始 | |
| effective_end | date | 否 | | 生效结束 | |
| status | tinyint | 是 | | 状态 | |
agent_commission_record:代理商佣金流水表
|-------------------|---------------|--------|--------|---------|----------|
| 字段名 | 类型 | 必填 | 索引 | 说明 | 业务规则 |
| id | bigint | 是 | PK | 佣金ID | |
| agent_id | bigint | 是 | IDX | 代理商ID | |
| tenant_id | bigint | 是 | IDX | 租户ID | |
| order_id | bigint | 是 | IDX | 订单ID | |
| payment_id | bigint | 否 | IDX | 收款ID | 收款后计佣 |
| base_amount | decimal(18,2) | 是 | | 计佣基数 | |
| commission_rate | decimal(10,4) | 是 | | 佣金比例 | |
| commission_amount | decimal(18,2) | 是 | | 佣金金额 | |
| commission_status | tinyint | 是 | IDX | 佣金状态 | 待结/已结/冻结 |
| settlement_id | bigint | 否 | IDX | 分润结算单ID | |
agent_settlement:代理商分润结算单表
|-------------------|---------------|--------|--------|--------|----------|
| 字段名 | 类型 | 必填 | 索引 | 说明 | 业务规则 |
| id | bigint | 是 | PK | 结算单ID | |
| settlement_no | varchar(64) | 是 | UK | 结算单号 | |
| agent_id | bigint | 是 | IDX | 代理商ID | |
| period_start | date | 是 | | 开始日期 | |
| period_end | date | 是 | | 结束日期 | |
| commission_amount | decimal(18,2) | 是 | | 佣金总额 | |
| paid_amount | decimal(18,2) | 是 | | 已付金额 | |
| settlement_status | tinyint | 是 | IDX | 状态 | 待审/待付/已付 |
| audit_user_id | bigint | 否 | | 审核人 | |
| pay_time | datetime | 否 | | 付款时间 | |
ops_follow_record:租户跟进记录表
|------------------|---------------|--------|--------|--------|-------------|
| 字段名 | 类型 | 必填 | 索引 | 说明 | 业务规则 |
| id | bigint | 是 | PK | 主键 | |
| tenant_id | bigint | 否 | IDX | 租户ID | 线索期可为空 |
| lead_id | bigint | 否 | IDX | 线索ID | |
| follow_type | tinyint | 是 | | 跟进类型 | 电话/微信/上门/售后 |
| follow_content | varchar(1000) | 是 | | 跟进内容 | |
| next_follow_time | datetime | 否 | IDX | 下次跟进时间 | |
| follow_result | tinyint | 否 | | 结果 | 有意向/无意向/待续费 |
| operator_id | bigint | 是 | IDX | 跟进人 | |
| create_time | datetime | 是 | | 创建时间 | |
msg_notice_task:续费/账单提醒任务表
|------------------|---------------|--------|--------|--------|--------------|
| 字段名 | 类型 | 必填 | 索引 | 说明 | 业务规则 |
| id | bigint | 是 | PK | 任务ID | |
| tenant_id | bigint | 是 | IDX | 租户ID | |
| notice_type | tinyint | 是 | IDX | 提醒类型 | 到期/欠费/账单/发票 |
| receiver_type | tinyint | 是 | | 接收人类型 | 租户/销售/运营/代理商 |
| receiver | varchar(128) | 是 | | 接收人 | 手机号/用户ID |
| title | varchar(128) | 是 | | 标题 | |
| content | varchar(1000) | 是 | | 内容 | |
| send_channel | tinyint | 是 | | 渠道 | 短信/微信/站内信/邮件 |
| send_status | tinyint | 是 | IDX | 发送状态 | 待发/成功/失败 |
| plan_send_time | datetime | 是 | IDX | 计划发送时间 | |
| actual_send_time | datetime | 否 | | 实际发送时间 | |
audit_operation_log:运营后台操作日志表
|----------------|--------------|--------|--------|--------|-------------------|
| 字段名 | 类型 | 必填 | 索引 | 说明 | 业务规则 |
| id | bigint | 是 | PK | 日志ID | |
| operator_id | bigint | 是 | IDX | 操作人ID | |
| operator_name | varchar(64) | 是 | | 操作人姓名 | 快照 |
| module_name | varchar(128) | 是 | IDX | 模块名称 | 租户/订单/账单/退款 |
| operation_type | varchar(64) | 是 | IDX | 操作类型 | 新增/修改/审核/停用/退款 |
| biz_type | varchar(64) | 是 | IDX | 业务类型 | tenant/order/bill |
| biz_id | bigint | 否 | IDX | 业务ID | |
| biz_no | varchar(64) | 否 | IDX | 业务单号 | |
| before_data | json | 否 | | 修改前数据 | |
| after_data | json | 否 | | 修改后数据 | |
| risk_level | tinyint | 是 | IDX | 风险等级 | 普通/重要/高危 |
| ip | varchar(64) | 否 | | IP地址 | |
| create_time | datetime | 是 | IDX | 操作时间 | |
audit_export_task:运营后台导出审计表
|-----------------|--------------|--------|--------|--------|-------------|
| 字段名 | 类型 | 必填 | 索引 | 说明 | 业务规则 |
| id | bigint | 是 | PK | 任务ID | |
| task_no | varchar(64) | 是 | UK | 导出任务号 | |
| operator_id | bigint | 是 | IDX | 操作人 | |
| export_type | varchar(64) | 是 | IDX | 导出类型 | 租户/账单/收款/报表 |
| query_condition | json | 否 | | 查询条件 | 完整保存筛选条件 |
| row_count | int | 否 | | 导出行数 | 风险判断 |
| file_url | varchar(500) | 否 | | 文件地址 | 短期有效 |
| download_count | int | 是 | | 下载次数 | |
| expire_time | datetime | 否 | | 过期时间 | |
| status | tinyint | 是 | IDX | 状态 | 处理中/成功/失败 |
| ip | varchar(64) | 否 | | IP | |
| create_time | datetime | 是 | IDX | 创建时间 | |
八、接口与权限建议
8.1 后台 API 分组建议
|--------------------|--------------------------------------------|------------|
| 接口分组 | 典型接口 | 说明 |
| /ops/tenants | list/detail/create/update/status/control | 租户管理与服务控制 |
| /ops/packages | package CRUD、feature binding、quota binding | 套餐、功能、配额维护 |
| /ops/subscriptions | open/renew/upgrade/downgrade/pause/resume | 订阅生命周期 |
| /ops/orders | create/submit/audit/cancel/complete | 订购订单管理 |
| /ops/bills | generate/list/detail/void/overdue | 账单应收管理 |
| /ops/payments | register/writeoff/reverse/query | 收款与核销 |
| /ops/invoices | apply/audit/issue/redflush | 发票管理 |
| /ops/refunds | apply/audit/execute | 退款管理 |
| /ops/agents | agent CRUD、commission、settlement | 代理商与分润 |
| /ops/reports | revenue/renewal/arrears/tenant/agent | 运营报表 |
| /ops/audit | operation/export/login/risk | 审计与风控 |
8.2 权限控制建议
|-----------|-------------|----------------------|
| 权限点 | 风险 | 控制建议 |
| 租户开通 | 开通非法租户或绕过收费 | 仅运营主管/管理员可执行,必须记录日志 |
| 修改服务到期日 | 私自延长服务 | 必须审批,记录 before/after |
| 套餐价格修改 | 影响所有订单价格 | 仅产品/财务管理员可维护 |
| 订单折扣 | 低价成交或利益输送 | 按折扣率触发审批 |
| 账单作废 | 减少应收 | 财务主管审批 |
| 收款撤销 | 财务风险 | 必须关联原因和凭证 |
| 退款 | 资金流出 | 多级审批,校验发票状态 |
| 租户停用/注销 | 客户业务中断 | 高危操作,二次确认和审批 |
| 导出租户/财务数据 | 数据泄露 | 导出任务化、水印、过期、审计 |
| 代理商佣金调整 | 分润风险 | 审批+日志+财务复核 |
8.3 Spring Boot 落地建议
|---------------|----------------------------------------------------------------------|
| 层级 | 建议 |
| Controller | 保持薄控制器,只做参数校验、权限注解、调用 Service |
| Service | 封装业务状态机,例如 TenantLifecycleService、BillingService、SubscriptionService |
| Domain Policy | 将计费、到期、欠费、超量策略独立为 Policy,避免散落 if else |
| MyBatis-Plus | 基础 CRUD 使用 MP,复杂报表使用 XML + 明确索引 |
| 事务 | 订单完成、账单核销、订阅生效必须同事务或使用 Outbox 保证一致 |
| 定时任务 | 到期提醒、欠费状态更新、资源配额重置、用量汇总使用 Quartz |
| 缓存 | 套餐功能、租户授权、配额使用可使用 Redis + 本地缓存 |
| 审计 | 使用 AOP 记录高危操作 before/after JSON |
九、审计风控与数据安全
9.1 高风险操作清单
|----------|----------|----------------------|----------|
| 操作 | 风险等级 | 必须记录字段 | 是否审批 |
| 人工延长服务期 | 高 | 租户、原到期日、新到期日、原因、操作人 | 是 |
| 人工开启高级功能 | 高 | 功能项、有效期、原因 | 是 |
| 大额折扣 | 高 | 原价、折扣、折扣率、审批人 | 是 |
| 账单作废 | 高 | 账单金额、作废原因、审批人 | 是 |
| 收款撤销 | 高 | 收款流水、撤销原因、凭证 | 是 |
| 退款执行 | 高 | 退款金额、原订单、原收款、发票状态 | 是 |
| 租户停用/注销 | 高 | 租户状态、原因、通知情况 | 是 |
| 导出财务数据 | 中高 | 查询条件、行数、IP、文件地址、下载次数 | 按行数触发 |
9.2 数据安全建议
- 平台运营后台与商户前台必须分离登录域名、Token、菜单权限和数据权限。
- 财务数据、租户联系人、发票税号、银行账号等字段需按权限脱敏展示。
- 导出文件必须短期有效,建议 24 小时过期,下载需再次鉴权并记录下载日志。
- 退款、账单作废、人工延长服务期必须走审批流,不允许普通运营直接完成。
- 租户服务状态改变后,应通过消息中心通知租户管理员、归属销售和客服人员。
- 租户授权与配额建议缓存,但服务控制和欠费状态需要支持立即失效。
十、升鲜宝落地实施路线
|-------------|-----------------------|---------------------|
| 阶段 | 建设内容 | 验收标准 |
| 第一阶段:基础运营后台 | 租户、套餐、订阅、服务状态、功能授权、配额 | 可开通试用/正式租户,可按套餐控制功能 |
| 第二阶段:费用闭环 | 订单、账单、收款、核销、续费、欠费提醒 | 可完成新购/续费/增购从下单到收款 |
| 第三阶段:财务增强 | 合同、发票、退款、账单作废、财务报表 | 财务可对账、开票、处理退款 |
| 第四阶段:服务控制 | 到期/欠费/超量策略、暂停恢复、消息通知 | 租户状态能自动影响前台功能 |
| 第五阶段:渠道分润 | 代理商、佣金规则、分润账单、代理商后台 | 可按订单收款计算并结算佣金 |
| 第六阶段:审计风控 | 审批流、导出审计、敏感字段脱敏、异常告警 | 高危操作全留痕,可追责 |
10.1 推荐项目结构
com.sxb.ops.tenant:租户管理、租户生命周期、服务控制
com.sxb.ops.package:套餐、功能项、配额、增购项
com.sxb.ops.subscription:订阅、续费、升级、暂停恢复
com.sxb.ops.billing:订单、账单、账单明细、收款核销
com.sxb.ops.invoice:发票、退款
com.sxb.ops.agent:代理商、佣金、分润
com.sxb.ops.audit:操作日志、导出日志、审批审计
com.sxb.ops.report:收入、续费、欠费、租户活跃报表
十一、测试验收清单
|---------|--------------------------------|
| 测试项 | 验收点 |
| 租户开通 | 试用租户和正式租户均可按套餐自动生成订阅、功能授权和资源配额 |
| 套餐变更 | 升级后功能立即增加,降级后下周期生效,所有变更有日志 |
| 续费 | 续费成功后服务结束日期正确延长,欠费状态恢复正常 |
| 欠费控制 | 到期后进入宽限期,超过宽限期自动限制前台功能 |
| 资源超量 | 员工数、门店数、AI次数、短信条数超量时按策略提醒或限制 |
| 账单收款 | 账单支持部分收款、全额核销、收款撤销,余额正确 |
| 发票 | 开票金额不能超过可开票金额;退款前校验发票状态 |
| 退款 | 退款审批通过后,订单、账单、收款、订阅服务期联动正确 |
| 代理商分润 | 收款后才计佣;退款后佣金可冲减或冻结 |
| 权限 | 普通运营不能修改服务期、作废账单、执行退款 |
| 导出审计 | 导出租户、账单、收款数据必须生成导出任务和下载日志 |
| 报表 | 收入、应收、续费、欠费、代理商业绩与明细数据一致 |
十二、参考资料
本文为竞品推理与研发设计文档,参考公开产品说明与农批 SaaS 业务形态进行功能抽象。公开资料中,菜某秘面向农贸批发配送行业,强调智能语音开单、赊欠管理、库存管理、代销结算、经营报表、打印与硬件适配等能力。
|---------------|------------------------------------------------|-------------------|
| 来源 | 链接 | 用途 |
| App Store:菜某秘 | https://apps.apple.com/cn/app/菜某秘/id1490901038 | 公开功能描述、产品定位、版本能力 |
| 菜某秘官网 | https://www.caixm.cn/ | 产品定位、核心功能描述 |
| 36氪项目/报道 | https://m.36kr.com/p/1724929359873 | 行业 SaaS 背景与产品升级信息 |