修改河南项目的管理后台ui

This commit is contained in:
2026-09-24 11:18:30 +08:00
parent 23fe1f3995
commit 4be9ce4e85
19 changed files with 2513 additions and 178 deletions
@@ -85,6 +85,13 @@ public class TtUpgradeRecord implements Serializable {
@TableField("effective_amount_invested")
private BigDecimal effectiveAmountInvested;
/** 本次拉取时的全局水位%(1−RTP,排除白号、含人工调整),用于复盘「这批货在什么水位下出的」 */
private BigDecimal watermark;
/** 本轮抽到的随机数快照(单位:饰品价百分比;水位驱动的结果) */
@TableField("round_target")
private Integer roundTarget;
/** 真实计算金额:超过 75% 按 75% 计算,小于等于 75% 按实际概率计算 */
@TableField("effective_amount")
private BigDecimal effectiveAmount;
@@ -0,0 +1,64 @@
package com.ruoyi.domain.other;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* 幸运升级奖池水位调整日志 tt_upgrade_reward_log(注水/抽水/重置审计)。
* <p>
* 水位口径:水位 = (Σ下注 − Σ返奖 + 人工调整) / Σ下注,统计**全局**(整个幸运升级、所有饰品位),
* 且**排除白号**(白号是演出账号,其成本单独展示,不参与水位)。
* <p>
* 人工调整额 = 本表 {@code SUM(delta)}(DB 为真相),Redis 只做短缓存。
* {@code delta} 是带符号影响:注水为正、抽水为负、重置为抵消当前净调整的值。
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@Builder
@TableName("tt_upgrade_reward_log")
public class TtUpgradeRewardLog implements Serializable {
@TableField(exist = false)
private static final long serialVersionUID = 1L;
@TableId(type = IdType.AUTO)
private Long id;
/** 1注水 2抽水 3重置 */
private Integer type;
/** 调整金额(绝对值,展示用) */
private BigDecimal amount;
/** 对水位的带符号影响(注水正 / 抽水负 / 重置为抵消值);水位调整额 = SUM(delta) */
private BigDecimal delta;
@TableField("watermark_before")
private BigDecimal watermarkBefore;
@TableField("watermark_after")
private BigDecimal watermarkAfter;
private String operator;
/** 调整原因(必填,前端保证) */
private String remark;
@TableField("create_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
}
@@ -0,0 +1,53 @@
package com.ruoyi.domain.other;
import lombok.Data;
/**
* 幸运升级水位策略配置(sys_config: luckyUpgradeWatermark)。
* <p>
* <b>只配一个数:目标水位(%)</b>。水位是**整个幸运升级**的全局指标,含义是「平台希望长期维持的净收益比例」,
* 由 {@code 水位% = (Σ下注 − Σ返奖 + 人工调整) / Σ下注 × 100} 实时算出(排除白号)。
* <p>
* 随机数不再由后台手配区间,而是按目标水位自动推算:
* <ol>
* <li>先算出「长期出这个随机数、水位正好停在目标值」的中心值 {@code V* = 100 / ((1 − 目标水位/100) × k)},
* 其中 {@code k} 是实测标定系数(判定溢出导致实际需求约为名义值的 1.18~1.20 倍);</li>
* <li>再按当前水位相对目标值的偏离做负反馈:水位高于目标 → 中心下移(放水),低于目标 → 上移(收紧);</li>
* <li>最后在该饰品位自己的随机数区间 {@code [min, max]} 内围绕这个中心抖动,并夹取到区间边界。</li>
* </ol>
* ⇒ 后台改一个数即可,随机数的取值范围仍由每个饰品的区间控制(区间越宽,单轮波动越大)。
*/
@Data
public class UpgradeWatermarkSettingBody {
/**
* false = 逐字节回退旧行为(用每个饰品位固定 luck_section 抽随机数,不读水位)。
* 出问题时关掉即可回滚,不需要发版。
*/
private Boolean enabled;
/**
* <b>目标水位(%)</b> —— 平台希望长期维持的净收益比例。例:30 ⇒ 平均 RTP 约 70%。
* <p>
* 水位高于它 → 本轮随机数中心下调(放水,让玩家更容易出);
* 水位低于它 → 中心上调(收紧)。长期会自动收敛回这个值。
* 可为负数(负水位 = 允许先放水、后回收)。
*/
private Double targetWatermark;
/**
* 响应灵敏度:当前水位每偏离目标 1 个百分点,随机数中心反向调整 {@code gain}%。
* 默认 2(水位高出目标 10 个点 ⇒ 中心降 20%)。属调参用的高级参数,后台不展示。
*/
private Double gain;
/**
* 幸运值累加口径 —— **只影响「展示值 + 落库快照」,不影响中奖判定**:
* <ul>
* <li>{@code raw}(默认)= 累加前端传来的原始概率,与历史记录口径一致;</li>
* <li>{@code eff} = 累加 {@code min(概率,75)},与中奖判定同口径(选 &gt;75% 时展示值不会跑在判定前面)。</li>
* </ul>
* 中奖判定固定使用 {@code min(概率,75)},与本配置无关。
*/
private String luckyValueMode;
}
@@ -30,6 +30,13 @@ public class ApiLuckyOrnamentsDataVO {
private String levelImg;
/** 本饰品当前幸运值(累计原始概率,出货成功清 0;按当前查看用户类型返回) */
/** 查看者所属身份对共享幸运值的贡献(自上次任一身份中奖以来),排查用;前端一般只用 luckyValue */
private Integer myLuckyValue;
/**
* 本饰品当前幸运值 = **三个身份共享的一个累计值**(所有人看到的数一致)。
* 口径:累加前端传来的原始概率(见 `luckyValueMode`);**任一身份中奖即整体归零**。
* 注意这是**展示口径**,中奖判定固定用 `min(概率, 75)`,两者刻意分开。
*/
private Integer luckyValue;
}
@@ -29,6 +29,12 @@ public class TtUpgradeOrnamentsDataVO {
private String luckSection;
/** 普通身份的累计幸运值(判定口径累加,出货成功清 0) */
private Integer probabilityInvested;
/** 主播身份的累计幸运值 */
private Integer anchorProbabilityInvested;
private BigDecimal amountRequired;
private BigDecimal amountInvested;