壹软壹软在线方案消费促销分红激励平台 V1.0

技术设计

数据模型、接口与工程实现

这一页面向客户的技术负责人:说明规则在代码里长什么样、需要哪些数据表与接口、以及靠什么保证钱不会算错。本方案的规则引擎已经是可运行代码,不是伪代码。

规则引擎的代码结构

规则集中在一处,参数与逻辑分离,运营调参不需要动业务代码。

文件职责
src/lib/engine/config.ts全部业务参数:让利区间、各层分配比例、系数档次、券规则、触发阈值、安全阀
src/lib/engine/split.ts单笔订单分账,输出完整分账树与 70% 科目明细
src/lib/engine/weights.ts商家三系数、消费者双系数、有效商家判定、让利额度落级
src/lib/engine/payout.ts待发池触发判定与按权重分配,含单次封顶与流动性保护
src/lib/engine/coupons.ts券发放、门槛与叠加校验、核销、过期回流结算
src/lib/engine/unfreeze.ts商家解冻账户推进、月度上限顺延、烧伤分摊
src/lib/engine/dividend.ts大盘分红按 Y1~Y7 切池、运营中心按部门让利加权
src/lib/engine/simulate.ts多日闭环模拟,含资金守恒断言
src/lib/engine/money.ts整数分运算与最大余数法分配,保证分账不丢分

核心数据模型

资金相关的表都保留比例与来源字段,任何一笔钱都能回溯到订单与规则版本。

merchant 商家
id
商家标识
discount_rate
当前促销让利率 1%~18%
opened_at
开业时间,用于长周期系数
refund_rate_30d
近 30 天退款率,用于信用系数
last_order_at
最近交易时间,用于有效商家判定
status
在营 / 警告 / 暂停 / 退出
unfreeze_account 解冻账户
merchant_id
所属商家
total_discount_fen
累计让利总额
target_fen
解冻目标 = 累计让利 × 2
unfrozen_fen
已解冻金额
pending_fen
受月度上限顺延的金额
month_unfrozen_fen
本月已解冻,用于上限判定
order 订单
id
订单号
amount_fen
订单金额
discount_rate
下单时快照的让利率
discount_fen
让利额
instant_discount_fen
秒分立减金额
coupon_deduct_fen
券抵扣金额
split_entry 分账明细
order_id
来源订单
subject
科目:联合创始人 / 运营中心 / 大盘 / 业务经理 / 推广员 / 拓展 / 锁客 / 留存
payee_type
受益人类型
payee_id
受益人标识
amount_fen
金额
ratio_of_discount
占让利额比例,便于回溯
pending_pool 待发池
consumer_fen
归消费者的累积额
merchant_fen
归商家的累积额
last_payout_at
上次发放时间,用于 7 天触发
recycled_fen
券过期回流的红包池
coupon 券
kind
targeted 定向 / universal 万向
face_fen
券面额
merchant_id
定向券绑定的商家
expire_at
过期时间
status
持有 / 已用 / 已过期
payout 分红发放
trigger_type
amount 金额触发 / time 时间触发
pool_fen
本次发放总额
consumer_fen
消费者部分
merchant_fen
商家部分
held_fen
封顶转待领取的金额

主要接口

所有写操作都要求幂等键,重试不会造成重复入账或重复发券。

方法路径说明
POST/api/orders下单并实时分账,返回完整分账树与消费者立减金额
GET/api/merchants/:id/unfreeze商家解冻进度、月度上限、顺延金额与加速项
POST/api/merchants/:id/discount-rate调整让利率,返回健康系数与生效时间
GET/api/consumers/:id/wallet现金余额、待领取、持有券与权重明细
POST/api/coupons/:id/redeem券核销,校验门槛、归属与叠加上限
POST/api/payouts/trigger待发池触发发放,幂等键防重复
GET/api/reconciliation/daily日终资金守恒对账单
GET/api/config/rules读取当前生效的全部规则参数

金额精度与对账

分红系统最怕的不是算得慢,而是算错了没人发现。方案里用三层机制兜住这件事。

整数分运算
全程以「分」为单位的整数计算
不使用浮点金额,避免 0.1 + 0.2 这类误差在千万级流水上累积成实际资金差额。
最大余数法分配
父子金额严格恒等
按比例拆分产生的余数按小数部分大小依次补给受益方,既不丢分也不多分,分账树任意一层求和都等于父级。
日终守恒校验
不平即阻断次日发放
每日跑一遍资金守恒断言并留存对账单,任一条不成立立即告警并暂停自动发放,避免错账继续扩散。

日终校验清单

  • 让利额 = 70% 收益分配 + 30% 补贴(逐笔与日汇总两级校验)
  • 补贴流出 ≤ 补贴池累计 + 券过期回流 + 烧伤分摊
  • 每个商家累计解冻 ≤ 其累计让利额 × 2
  • 待发池余额 = 累计入池 − 累计发放
  • 分账明细金额之和 = 订单让利额(按科目逐项核对)

这五条已经写成自动化测试,在闭环模拟页每次运行都会执行一遍。

测试覆盖

规则类系统的正确性必须靠测试固定下来,改参数不能悄悄改变结果。

金额拆分

最大余数法不丢分、权重为零时不分配

分账层级

1%~18% 全区间下父子金额恒等,科目合计等于 70%

权重系数

三系数相乘、套利降权、有效商家判定、冻结与恢复

触发条件

工作日 100 元、周末 150 元、满 7 天、流动性保护

券生命周期

门槛校验、限店、叠加上限、两种过期分配

解冻与烧伤

双倍上限、月度 20% 顺延、烧伤 50% 分摊

分红池

大盘 Y 级切池、运营中心按部门加权

闭环模拟

资金守恒断言、解冻不越限、同种子结果可复现

在项目根目录执行 npm test 可运行全部规则测试。

待客户确认后才能定稿的部分

下列问题会直接改变金额计算结果,已按默认值实现且集中在配置层,确认后改配置即可。

编号问题当前实现与影响
Q0「让利额双倍返还」的资金来源(优先级最高)每 100 元让利只有 12 元稳定回流商家解冻账户,加上定向券全部过期的极端情况上限为 14.52 元,与 200 元的解冻目标相差 185.48 元。当前代码按「双倍为解冻上限」实现,不会超发。待确认:请确认双倍的口径:由平台留存补贴、计入券核销营业额、或定义为解冻上限
Q1券有效期口径不一致《消费者端》表一写定向券 7 天、万向券 3 天,表二写两者均为 10 天。程序已做成可配置,默认取 7 天与 3 天。待确认:请确认最终有效期
Q2商家锁客 1% 的计算基数资料同时写「1%」与「商家流水的万 1」。按让利额 1% 与按流水 0.01% 相差约 10 倍(以 10% 让利率计)。待确认:请确认按让利额还是按流水计算
Q3协作创收 10% 与业务经理 10% + 推广员 7% 的关系图中「协作创收 10%」下挂业务经理 10% 与推广员 7%,两者相加超过父级 10%。当前实现按各自独立占让利额比例落账,合计 17%。待确认:请确认父子关系与实际比例
Q470% 中的预留科目④⑤资料标注为预留,暂按 0% 实现,接口已预埋。已明确科目合计 25.6%,其余 44.4% 计入平台留存。待确认:请确认预留科目的用途与比例
Q5好评率奖励规则《商家端》写「好评率 > 95%,端口预留」,未给出具体奖励值。待确认:请给出奖励形式与数值
Q6解冻双倍与月度 20% 上限的时间关系让利总额随交易持续增长,月度上限也随之提高。当前实现按「当前累计让利总额 × 20%」逐月计算。待确认:请确认是否按累计让利额或按当月让利额计算上限
Q7退出商家的烧伤范围「退出商家未解冻钱的 50%」当前按其未解冻额度(双倍目标减已解冻)计算,剩余 50% 进平台储备金。待确认:请确认未解冻额度的定义与剩余部分归属
Q8资金合规与账户体系现金红包可直接提现,需明确资金存管、提现通道、税务与发票处理方式。待确认:请提供支付通道与合规要求