diff --git a/docs/洗码量计算规则.md b/docs/洗码量计算规则.md new file mode 100644 index 0000000..585458a --- /dev/null +++ b/docs/洗码量计算规则.md @@ -0,0 +1,61 @@ +# 洗码量(码量)计算规则 + +> 客户在 2026-05-28 明确的完整规则,由此重写了开奖结算逻辑。 +> 实现位置:`app/services/opening/OpeningBaccaratService.php`、`OpeningDtService.php` + +## 核心定义 + +**洗码量 = 投注额(按原投注额度计,不乘赔率)** + +系统有两种洗码模式,存于 `cg_user.type_xima`: + +| type_xima | 模式 | 规则 | +|-----------|------|------| +| 1 | 双边洗码 | **所有投注**都计洗码,开和不计 | +| 2 | 单边洗码 | 只有**输口**计洗码,开和不计 | + +> 注意:历史代码里 type_xima 的语义曾被误用为 `1=双边/2=单边`,已确认数据库中 +> 单边洗码会员是 `type_xima=2`。 + +## 百家乐(game_id=1) + +下注位置:庄、闲、和、庄对、闲对、幸运6、大、小 + +**单边洗码(type_xima=2)— 输口计洗码:** +- 庄赢:洗码 = 闲 + 和 + 没中的对子 + 没中的幸运6 + 没中的大小 +- 闲赢:洗码 = 庄 + 和 + 没中的对子 + 没中的幸运6 + 没中的大小 +- 和局:庄闲退回不计,洗码 = 没中的对子 + 没中的幸运6 + 没中的大小 + +**双边洗码(type_xima=1)— 所有投注都计洗码:** +- 庄赢/闲赢:洗码 = 全部投注额(`$amount`) +- 和局:庄闲退回部分不计,其余照常(开和不计核心投注) + +## 龙虎(game_id=2) + +下注位置:龙、虎、和 + +- **和局不杀龙虎**,龙虎全额退回(dt_half 旧逻辑"和局杀一半"已废除) +- 单边洗码:龙赢→洗码=虎+和;虎赢→洗码=龙+和 +- 双边洗码:龙赢/虎赢→洗码=全部投注额;和局→0 +- 赔率:龙/虎 1:0.97,和 1:40 + +## 百家乐赔率补充 +- 庄 1:0.95,闲 1:1,和 1:8 +- 免佣模式(baccarat_type=1):庄赢且非幸运6 时 1:1,幸运6 时 1:0.5 + +## 关键代码模式 + +```php +// 输口判断:开出的结果 != 投注位置 → 该位置投注额计入 ximaliang +if($userInfo['type_xima'] == 1){ + $ximaliang = $amount; // 双边:全部投注 +}else{ + $ximaliang += <各输口投注额>; // 单边:仅输口 +} +// 开和:庄闲退回,ximaliang 不累加这部分 +``` + +## 数据落地 +- 洗码记录写入 `cg_xima` 表,字段 `ximaliang`(原投注额)、`maliang`(=ximaliang×码率)、`net_maliang` +- 开奖时(OpeningXxxService→Bet::openingBet)实时按各级代理当前码率计算并落库 +- **码率/占成在开奖时实时读 DB**,改了码率只影响之后开的局,已开未结的局不变