<?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);