PHPackages                             lotteryyii/lottery - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. lotteryyii/lottery

ActiveLibrary

lotteryyii/lottery
==================

yii2 lottery

v1.0.0(5y ago)242MITPHP

Since Jan 23Pushed 4y ago1 watchersCompare

[ Source](https://github.com/zclott/lottery-for-yii2)[ Packagist](https://packagist.org/packages/lotteryyii/lottery)[ RSS](/packages/lotteryyii-lottery/feed)WikiDiscussions main Synced 3d ago

READMEChangelog (1)Dependencies (1)Versions (2)Used By (0)

lottery-for-yii2
================

[](#lottery-for-yii2)

> ##### yii2版composer抽奖程序插件，包含服务端和前端html(vue和js版大转盘)
>
> [](#yii2版composer抽奖程序插件包含服务端和前端htmlvue和js版大转盘)

#### 程序流程

[](#程序流程)

1. 创建活动
2. 添加活动的奖品
3. 前端展示
4. 抽奖
5. 记录抽奖

- 这些可以简单在自己的cms系统增加个抽奖模块，管理抽奖模块数据，本插件只涉及抽奖行为业务，数据部分直插数据库表。

#### 运行环境

[](#运行环境)

- php &gt;= 5.4
- composer
- yii2
- mysql
- yii2-redis &gt; 2.\*

#### 安装

[](#安装)

```
$ composer require lotteryyii/lottery

```

#### 添加 aliases,在config/web.php中aliases添加

[](#添加-aliases在configwebphp中aliases添加)

```
    'aliases' => [
        '@lotteryyii/lottery'   => '@vendor/lotteryyii/lottery/src',
    ],
```

#### 视图

[](#视图)

[![image](https://camo.githubusercontent.com/233d90da8f7b1e20ab8b85fe8f3edb0ed7b28ac051608f55611406ff6d99c7a1/687474703a2f2f7777772e7169616e676275732e636f6d2f7265732f696d616765732f647261772e706e67)](https://camo.githubusercontent.com/233d90da8f7b1e20ab8b85fe8f3edb0ed7b28ac051608f55611406ff6d99c7a1/687474703a2f2f7777772e7169616e676275732e636f6d2f7265732f696d616765732f647261772e706e67)

tips:静态资源和yii视图模板放在views下，vue版大转盘前端模板参考：

#### 抽奖主类 Lottery.php

[](#抽奖主类-lotteryphp)

- 对外方法

method描述lottery抽奖方法prizeList奖品列表getPrizeRecord获奖记录activityInfo活动详情```
/**
 * Lottery  lottery. 抽奖主方法
 * @param $uid int 用户id
 * @param $activityId int 活动id
 * @param $lotteryLimit int 抽奖次数
*/
public static function lottery($activityId,$uid=null,$lotteryLimit=0)
{
	$activityInfo =self::activityInfo($activityId);
	if(!$activityInfo){

		return self::returnOut(0,'活动不存在');
	}
	if(!self::checkActivitydate($activityInfo)){

		return self::returnOut(0,'今天不在活动时间范围哦');
	}
	$prize = new LotteryPrize;
	$prizeObj = $prize->getAllList($activityId);
	if(!$prizeObj){

		return self::returnOut(0,'奖品不存在');
	}
	//$lotteryLimit == 0时，不限抽奖次数。
	if($uid && $lotteryLimit!=0){
		$redis = \Yii::$app->redis;
		//获取用户已抽奖次数，默认$lotteryTimes为0
		$lotteryTimes = $redis->hget('lotterytimes', 'lotterytimes_'.$activityId.'_'.$uid)?$redis->hget('lotterytimes', 'lotterytimes_'.$activityId.'_'.$uid):0 ;
		if( $lotteryTimes > $lotteryLimit-1){
			return self::returnOut(0,'抽奖次数已用完');
		}
		$redis->hincrby('lotterytimes','lotterytimes_'.$activityId.'_'.$uid,1); //记录用户抽奖次数
		//如果是每日限制$lotteryLimit次，则设置第二天0点过期
		//$redis->expire('lotterytimes','lotterytimes_'.$activityId.'_'.$uid,strtotime(date("Y-m-d",time()))+3600*24-time());
	}
	$proArr = []; //所有奖品概率基数数组
	foreach ($prizeObj as $obj) {
		if( $obj->num != 0 && $obj->basenumber!=0) { //奖品数量有限,概率基数不为0时
			//检查奖品数量是否达到抽取上限,达到则设置该奖项的中奖率为0。
			if(!self::checkPrizeCount($obj)){
				$obj->basenumber = 0;
			}
		}
		$proArr[] = $obj->basenumber;
	}
	$prizeIndex = self::getRand($proArr); //根据概率获取奖品的索引
	$result = $prizeObj[$prizeIndex]; //中奖奖品
	$record = new LotteryRecord;
	$addData = ['uid'=>$uid,'prizeId'=>$result->id,'prizename'=>$result->name,'activityId'=>$activityInfo->id,'activitytitle'=>$activityInfo->title,'state'=>$result->state,'lotterytime'=>time()];
	if($result->num == 0){ //奖品数量无限制时
		if(!$record->addonly($addData) ){ //中奖纪录写入数据库表,写入失败时，回退中奖次数
			if($uid && $lotteryLimit!=0){
				$redis->hincrby('lotterytimes','lotterytimes_'.$activityId.'_'.$uid,-1);
			}
		}
	}else{ //奖品数量有限制时
		$lott_num = $result->lott_num + 1 ;//已中奖数量+1
		if(!$record->addwith($addData,$lott_num) ){ //中奖纪录写入中奖记录表并更新奖品表，失败时，回退中奖次数
			if($uid && $lotteryLimit!=0){
				$redis->hincrby('lotterytimes','lotterytimes_'.$activityId.'_'.$uid,-1);
			}
		}

	}
	$data['id'] = $result->id; //中奖奖品id
	$data['name'] = $result->name; //中奖奖品名称
	$data['state'] = $result->state; //是否为空奖谢谢参与
	$data['index'] = $prizeIndex; //中奖奖品的索引
	return self::returnOut(0,'',$data);
}
```

#### 抽奖算法

[](#抽奖算法)

```
/**
* Lottery  getRand. 抽奖算法
* @param array $proArr 所有奖品概率基数数组
*/
protected static function getRand( $proArr )
{
	$result = '';
	//$proSum抽奖概率基数之和
	$proSum = array_sum( $proArr );

	foreach ($proArr as $k => $v) {
		//获取当次抽奖概率基数
		$randNum = mt_rand(1, $proSum);
		if ($randNum request->get('activityId',1);
		$uid =Yii::$app->request->get('uid',1);
		$lotteryLimit = Yii::$app->request->get('lotteryLimit',3);;
		$result = Lottery::lottery($activityId,$uid,$lotteryLimit);
		Yii::$app->response->format =  \yii\web\Response::FORMAT_JSON;
		if($result['result']){
			return ['code'=>0,'data'=>$result['result']];
		}else{
			return ['code'=>0,'message'=>$result['message']];
		}

	}
}
```

#### 备注

[](#备注)

- 这里所有的模型和控制器都给出来了，使用的时候可以不以插件服务提供者方式使用，可将Models和example内代码直接在自己项目的app目录包含应用程序的核心代码内。
- MYSQL创建语句在sql目录下
- 交流可发至943826443#qq.com,把#换成@. qq:943826443

###  Health Score

25

—

LowBetter than 37% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity8

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity53

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

1935d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/d1d57732436034fcae8f07387d76f8937468d8ed009e449ebd376eaaf97c0f6a?d=identicon)[zclott](/maintainers/zclott)

---

Top Contributors

[![zclott](https://avatars.githubusercontent.com/u/76580584?v=4)](https://github.com/zclott "zclott (9 commits)")

---

Tags

composerlotterylottery-yii2phpyii2lotterydrawturntable

### Embed Badge

![Health badge](/badges/lotteryyii-lottery/health.svg)

```
[![Health](https://phpackages.com/badges/lotteryyii-lottery/health.svg)](https://phpackages.com/packages/lotteryyii-lottery)
```

###  Alternatives

[hi-folks/rando-php

Random generator Library for PHP

12884.3k2](/packages/hi-folks-rando-php)[cloned/luckybox

A library to pick up the one with a specified probability from some items.

157.3k1](/packages/cloned-luckybox)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
