apicp.lottery.php
2.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?php
/**
* 抽奖函数
*/
include "Common/JsonResponse.php";
include "Common/mysqlHelper.php";
include "Common/Encrypter.php";
// 登录验证
include "AdminAuth.php";
if (!isset($_POST['award'])) {
JsonResponse::error('抽奖必须设置奖品');
}
$award = $_POST['award'];
/**
* 可以参加抽奖用户的条件:
* 1. 必须是签到过的畅移同事
* 2. 必须是未中过奖的同事
* 3. 中过奖但是已经取消中奖信息的不在参加范围内
* 4. 取消中奖但是准许下次继续参加抽奖的可以参加
*/
$sql = "SELECT id FROM user WHERE realname <> '' AND headimg <> '' AND id NOT IN (SELECT user_id FROM lottery WHERE is_cancel = 0 OR (is_cancel = 1 AND is_next = 0 )) AND `status` = 1";
$mysql = new mysqlHelper();
$data = $mysql->fetchAll($sql);
if (empty($data)) {
JsonResponse::result([]);
}
// 获取所有参与的抽奖号码
$ids = array_column($data, 'id');
$lottery = 0;
// 号码池随机打乱两次(shuffle随机数不需要播种,函数内已处理)
shuffle($ids);
shuffle($ids);
// 号码池如果超过10个,先分几次筛选到10个一下
while (count($ids) > 10) {
// 号码池留下一半
$ids = array_slice($ids, 0, floor(count($ids)/2));
// 再次打乱
shuffle($ids);
shuffle($ids);
}
// 取最后一个,就是中奖号码
$lottery = $ids[count($ids) -1];
// 记录中奖信息,写入数据库
$params = [
'user_id' => $lottery,
'award' => $award,
'created' => time()
];
$mysql->insert('lottery', $params);
$data = $mysql->fetch('SELECT * FROM user WHERE id=?', [$lottery]);
$result = [];
if ($data) {
$result = [
'realname' => $data['realname'],
'headimg' => $data['headimg'],
'user_id' => $lottery,
'award' => $award,
];
}
JsonResponse::result($result);