apicp.lottery.php 2.01 KB
<?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);