tourze / lottery-bundle
抽奖模块
Installs: 0
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
Type:symfony-bundle
Requires
- php: ^8.1
- ext-mbstring: *
- cloned/luckybox: ^0.9
- doctrine/collections: ^2.3
- doctrine/common: ^3.5
- doctrine/data-fixtures: ^2.0
- doctrine/dbal: ^4.0
- doctrine/doctrine-bundle: ^2.13
- doctrine/doctrine-fixtures-bundle: ^4.0
- doctrine/orm: ^3.0
- doctrine/persistence: ^3.1 || ^4
- easycorp/easyadmin-bundle: ^4
- fakerphp/faker: ^1.23
- knplabs/knp-menu: ^3.7
- nesbot/carbon: ^2.72 || ^3
- psr/log: ^3|^2|^1
- symfony/config: ^6.4
- symfony/console: ^6.4
- symfony/dependency-injection: ^6.4
- symfony/doctrine-bridge: ^6.4
- symfony/event-dispatcher: ^6.4
- symfony/event-dispatcher-contracts: ^2.5 | ^3
- symfony/expression-language: ^6.4
- symfony/framework-bundle: ^6.4
- symfony/http-foundation: ^6.4
- symfony/http-kernel: ^6.4
- symfony/messenger: ^6.4
- symfony/routing: ^6.4
- symfony/security-bundle: ^6.4
- symfony/security-core: ^6.4
- symfony/security-http: ^6.4
- symfony/serializer: ^6.4
- symfony/yaml: ^6.4 || ^7.1
- tourze/arrayable: 0.0.*
- tourze/async-contracts: 0.0.*
- tourze/backtrace-helper: 0.1.*
- tourze/benifit-bundle: 0.0.*
- tourze/bundle-dependency: 0.0.*
- tourze/doctrine-helper: 0.0.*
- tourze/doctrine-indexed-bundle: 0.0.*
- tourze/doctrine-ip-bundle: 0.0.*
- tourze/doctrine-precision-bundle: 0.1.*
- tourze/doctrine-snowflake-bundle: 0.1.*
- tourze/doctrine-timestamp-bundle: 0.0.*
- tourze/doctrine-track-bundle: 0.1.*
- tourze/doctrine-user-bundle: 0.0.*
- tourze/easy-admin-menu-bundle: 0.1.*
- tourze/enum-extra: 0.1.*
- tourze/json-rpc-cache-bundle: 0.1.*
- tourze/json-rpc-core: 0.0.*
- tourze/json-rpc-http-endpoint-bundle: 0.1.*
- tourze/json-rpc-lock-bundle: 0.1.*
- tourze/json-rpc-log-bundle: 0.1.*
- tourze/lock-service-bundle: 0.1.*
- tourze/resource-manage-bundle: 0.1.*
- tourze/symfony-cron-job-bundle: 0.1.*
- tourze/symfony-ecol-bundle: 0.1.*
- tourze/symfony-routing-auto-loader-bundle: 0.0.*
- tourze/text-manage-bundle: 0.0.*
- tourze/user-event-bundle: 0.0.*
- tourze/user-id-bundle: 0.1.*
Requires (Dev)
- maglnet/composer-require-checker: ^4
- phpstan/phpstan: ^2.1
- phpunit/phpunit: ^10.0
This package is auto-updated.
Last update: 2025-06-03 19:03:42 UTC
README
中奖概率参考设计: https://zhuanlan.zhihu.com/p/375142427
目前的设计是每个机会都落库,后面的抽奖其实就是取一个记录然后去更新。 这种方式好处是机会管理简单了,坏处不容易适配定制的机会次数管理。 例如 Loyalty 的机会是根据积分数来计算得来的,那么就不太适合了。
一次完整的抽奖,大概流程是:
- 检查活动状态;
- 确定一个有效的Chance;
- 预扣Chance;
- 确定奖池;
- 从奖池中选中一个奖品;
- 实扣Chance;
实现思路,参考一些已有的活动,我们思考我们系统怎么去满足:
- https://wuxia.qq.com/webplat/info/news_version3/5012/5013/5014/5016/m3486/202204/913177.shtml 2022年04月18日青龙秘宝活动规则
- https://www.woshipm.com/pd/4962252.html 中奖不易,抽奖活动设计更不易 里面关于抽奖模型的设计还不错
- https://zhuanlan.zhihu.com/p/139769916 关于抽奖的逻辑
- https://zhuanlan.zhihu.com/p/534645684 【游戏数值策划】抽奖模型的设计与分析 这个值得认真看
TODO:
- 活动规则;
- 开放日期限制;
- 开放时间限制;
- 每人每日赠送次数;
- 每人每日中奖次数限制;
- 每人总赠送次数;
- 每人总中奖次数限制;
- 随机分配奖池;
- 抽满次数奖池进阶;
- 连抽赠送新机会;
- 连抽必中指定奖品;
- 全服礼包(整个活动有N人参与后,则前面参与的用户直接发放指定奖品);
- 奖池规则;
- 奖品规则;
- 奖品的设计问题:我们到底是维护单独的奖品呢,还是做到SPU/SKU管理去;
- 实物奖的发奖:我们是直接同步到订单模块去,还是自己单独维护?
- 支持扣积分的方式来参与活动