新增功能:
- 礼包系统:superlevel 站长可发 888 数量 10 份礼包,支持金币/经验双类型
- 发包前三按钮选择(金币礼包 / 经验礼包 / 取消),使用 chatBanner 弹窗
- 聊天室系统公告含「立即抢包」按钮,金币红色/经验紫色配色区分
- WebSocket 实时推送红包弹窗卡片至所有在线用户
- Redis LPOP 原子分发 + 数据库 unique 约束防重领,并发安全
- 弹窗打开自动拉取服务端最新状态(剩余数量/已领/过期实时刷新)
- 新增 GET /red-packet/{id}/status 状态查询接口
- 新增 CurrencySource::RED_PACKET_RECV / RED_PACKET_RECV_EXP 枚举
安全加固:
- 后台用户编辑/强杀按钮仅 id=1 超管可见(前端隐藏 + 后端 403 双重拦截)
133 lines
4.9 KiB
PHP
133 lines
4.9 KiB
PHP
<?php
|
||
|
||
/**
|
||
* 文件功能:积分来源活动枚举
|
||
* 集中管理所有合法的 source 标识值,新增活动只需在此加一行常量,数据库字段无需任何变更。
|
||
* 对应数据表:user_currency_logs.source(varchar 字段,非 ENUM,可自由扩展)
|
||
*
|
||
* @author ChatRoom Laravel
|
||
*
|
||
* @version 1.0.0
|
||
*/
|
||
|
||
namespace App\Enums;
|
||
|
||
enum CurrencySource: string
|
||
{
|
||
/** 自动存点(Horizon 定时任务,每5分钟给在线用户加经验/金币) */
|
||
case AUTO_SAVE = 'auto_save';
|
||
|
||
/** 钓鱼收竿奖励(获得经验或金币) */
|
||
case FISHING_GAIN = 'fishing_gain';
|
||
|
||
/** 钓鱼抛竿消耗(扣除金币) */
|
||
case FISHING_COST = 'fishing_cost';
|
||
|
||
/** 送出礼物(送方扣金币) */
|
||
case SEND_GIFT = 'send_gift';
|
||
|
||
/** 收到礼物(收方魅力增加) */
|
||
case RECV_GIFT = 'recv_gift';
|
||
|
||
/** 新人礼包(首次登录赠送金币) */
|
||
case NEWBIE_BONUS = 'newbie_bonus';
|
||
|
||
/** 商城购买消耗(扣除金币) */
|
||
case SHOP_BUY = 'shop_buy';
|
||
|
||
/** 管理员手动调整(后台直接修改经验/金币/魅力) */
|
||
case ADMIN_ADJUST = 'admin_adjust';
|
||
|
||
/** 职务奖励(在职管理员通过名片弹窗向用户发放奖励金币) */
|
||
case POSITION_REWARD = 'position_reward';
|
||
|
||
// ─── 以后新增活动,在这里加一行即可,数据库无需变更 ───────────
|
||
// case SIGN_IN = 'sign_in'; // 每日签到
|
||
// case TASK_REWARD = 'task_reward'; // 任务奖励
|
||
// case PVP_WIN = 'pvp_win'; // PVP 胜利奖励
|
||
|
||
// ─── 婚姻系统 ────────────────────────────────────────────────
|
||
|
||
/** 结婚魅力加成(双方各获得,由戒指档次决定) */
|
||
case MARRY_CHARM = 'marry_charm';
|
||
|
||
/** 离婚魅力惩罚(协议/强制/超时自动)*/
|
||
case DIVORCE_CHARM = 'divorce_charm';
|
||
|
||
/** 购买戒指(gold 消耗,由 ShopService 代理) */
|
||
case RING_BUY = 'ring_buy';
|
||
|
||
/** 戒指消失记录(求婚被拒/超时,金额=0,仅存档) */
|
||
case RING_LOST = 'ring_lost';
|
||
|
||
/** 发送婚礼红包(扣除金币) */
|
||
case WEDDING_ENV_SEND = 'wedding_env_send';
|
||
|
||
/** 领取婚礼红包(收入金币) */
|
||
case WEDDING_ENV_RECV = 'wedding_env_recv';
|
||
|
||
/** 强制离婚财产转移(付出方为负,接收方为正) */
|
||
case FORCED_DIVORCE_TRANSFER = 'forced_divorce_transfer';
|
||
|
||
/** 节日福利红包(管理员设置的定时金币福利) */
|
||
case HOLIDAY_BONUS = 'holiday_bonus';
|
||
|
||
/** 百家乐下注消耗(扣除金币) */
|
||
case BACCARAT_BET = 'baccarat_bet';
|
||
|
||
/** 百家乐中奖赔付(收入金币,含本金返还) */
|
||
case BACCARAT_WIN = 'baccarat_win';
|
||
|
||
/** 星海小博士随机事件(好运/坏运/经验/金币奖惩) */
|
||
case AUTO_EVENT = 'auto_event';
|
||
|
||
/** 老虎机转动消耗金币 */
|
||
case SLOT_SPIN = 'slot_spin';
|
||
|
||
/** 老虎机中奖赔付(含本金返还) */
|
||
case SLOT_WIN = 'slot_win';
|
||
|
||
/** 老虎机诅咒额外扣除 */
|
||
case SLOT_CURSE = 'slot_curse';
|
||
|
||
/** 领取礼包红包——金币(用户抢到金币礼包时收入) */
|
||
case RED_PACKET_RECV = 'red_packet_recv';
|
||
|
||
/** 领取礼包红包——经验(用户抢到经验礼包时收入) */
|
||
case RED_PACKET_RECV_EXP = 'red_packet_recv_exp';
|
||
|
||
/**
|
||
* 返回该来源的中文名称,用于后台统计展示。
|
||
*/
|
||
public function label(): string
|
||
{
|
||
return match ($this) {
|
||
self::AUTO_SAVE => '自动存点',
|
||
self::FISHING_GAIN => '钓鱼奖励',
|
||
self::FISHING_COST => '钓鱼消耗',
|
||
self::SEND_GIFT => '送出礼物',
|
||
self::RECV_GIFT => '收到礼物',
|
||
self::NEWBIE_BONUS => '新人礼包',
|
||
self::SHOP_BUY => '商城购买',
|
||
self::ADMIN_ADJUST => '管理员调整',
|
||
self::POSITION_REWARD => '职务奖励',
|
||
self::MARRY_CHARM => '结婚魅力加成',
|
||
self::DIVORCE_CHARM => '离婚魅力惩罚',
|
||
self::RING_BUY => '购买戒指',
|
||
self::RING_LOST => '戒指消失',
|
||
self::WEDDING_ENV_SEND => '发送婚礼红包',
|
||
self::WEDDING_ENV_RECV => '领取婚礼红包',
|
||
self::FORCED_DIVORCE_TRANSFER => '强制离婚财产转移',
|
||
self::HOLIDAY_BONUS => '节日福利',
|
||
self::BACCARAT_BET => '百家乐下注',
|
||
self::BACCARAT_WIN => '百家乐赢钱',
|
||
self::AUTO_EVENT => '随机事件(星海小博士)',
|
||
self::SLOT_SPIN => '老虎机转动',
|
||
self::SLOT_WIN => '老虎机中奖',
|
||
self::SLOT_CURSE => '老虎机诅咒',
|
||
self::RED_PACKET_RECV => '领取礼包红包(金币)',
|
||
self::RED_PACKET_RECV_EXP => '领取礼包红包(经验)',
|
||
};
|
||
}
|
||
}
|