定制 lzpeng/php-prize-drawer 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

lzpeng/php-prize-drawer

Composer 安装命令:

composer require lzpeng/php-prize-drawer

包简介

抽奖组件

README 文档

README

抽奖组件, 适应日常开发中的各种抽奖场景。

特点

  • 方便扩展以支持各种奖品配置来源,如本地数组、数据库、甚至第三方接口
  • 支持多种奖品类型:Dummy(“假”的奖品,如“谢谢参与”)、Normal(普通奖品,用户线下兑奖)、扩展型奖品(需要调用第三方接口的,如红包、话费充值等)
  • 方便通过配置实现多种奖品分配规则,如 在指定时间才能抽中“真”奖品、按天数平均分配奖品数量等
  • 支持多种抽奖策略,如随机返回一个奖品、按机率返回一个奖品等
  • 高度抽象、方便扩展

环境需求

  • php >=7.0

安装

composer require "lzpeng/php-prize-drawer:1.0.*"

使用方式

use Lzpeng\PrizeDrawer\Factory;

// 通过工厂类创建抽奖组件实例
$drawer = Factory::create([
    'provider' => [ // 奖品配置提供器
        'driver' => 'array',
        'params' => [...],
    ],
    'accessor' => [ // 奖品数量存取器
        'driver' => 'model',
        'params' => [...]
    ],
    'strategy' => [ // 抽奖策略
        'driver' => 'chance',
        'params' => [...]
    ],
    'filters' => [ // 奖品过滤器
        'time_limit' => [ // 在指定时间内才返回"真"奖品,否则返回"假"奖品
            'start_time' => '09:00',
            'end_time' => '17:00',
        ],
        'avg_by_days' => [ // 按天数比均分配奖品数量
            'start_date' => '2020-04-01',
            'end_date' => '2020-04-08',
        ]
    ],
    'events' => [
        'draw_after' => [ // 抽奖后的事件
            LoggerListener::class,
            NotifyListener::class,
        ]
    ]
]);

// 设置当前用户
// $drawer->setUser(new User($id, ['phone' => 13800138000]));
$drawer->setUser($openid);


// 可动态添加过滤器, 但一般情况下通过配置设置就可以了
// $drawer->addFilter($name, $filter);
// $drawer->removeFilter($name);

// 可动态添加/移除监听器, 但一般情况下通过配置设置就可以了
// $drawer->addListener('draw_after', $listener);
// $drawer->removeListener('draw_after', $listener = null);

$conn->beginTransaction(); // 一般情况下,都会使用数据库,为保证并发,需要使用事务
try {
    $prize = $drawer->draw(); // 抽奖, 返回一个奖品
    // do somethings
    $conn->commit();
} catch(Exception $ex) {
    $conn->rollBack();
    // handle exception
}

// 返回奖品列表
$prizes = $drawer->prizes();

扩展

自定义抽奖策略

  1. 实现接口 \Lzpeng\PrizeDrawer\Contracts\StrategyInterface
  2. 注册 Factory::registerStrategy('策略名称', function($params) { return new CustomStrategy($params); });

自定义过滤器

  1. 实现接口 \Lzpeng\PrizeDrawer\Contracts\PrizesFilterInterface
  2. 注册 Factory::registerPrizesFilter('过滤器名称', function($params) { return new CustomPrizesFilter($params); });

自定义奖品配置提供器

  1. 实现接口 \Lzpeng\PrizeDrawer\Contracts\PrizesConfigProviderInterface
  2. 注册 Factory::registerPrizesConfigProvider('提供器名称', function($params) { return new CustomPrizesConfigProvider($params); });

自定义已抽数量存取器

  1. 实现接口\Lzpeng\PrizeDrawer\Contracts\PrizeQuantiyOfDrawAccessorInterface
  2. 注册 Factory::registerPrizeQuantiyOfDrawAccessor('存取器名称', function($params) { return new CustomPrizeQuantiyOfDrawAccessor($params); });

License

MIT

lzpeng/php-prize-drawer 适用场景与选型建议

lzpeng/php-prize-drawer 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 19 次下载、GitHub Stars 达 1, 最近一次更新时间为 2020 年 04 月 15 日, 在 PHP 生态内属于活跃度较高的组件。

我们在过去多个企业项目中使用过 lzpeng/php-prize-drawer 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 lzpeng/php-prize-drawer 我们能提供哪些服务?
定制开发 / 二次开发

基于 lzpeng/php-prize-drawer 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 19
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 1
  • 点击次数: 8
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 1
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2020-04-15