zoukankan      html  css  js  c++  java
  • weiphp 刮刮卡控制器代码2

      1 <?php
      2 
      3         // 权限判断
      4         unset ( $map );        //释放变量
      5         $map ['token'] = get_token ();        //设置数组token值
      6         $map ['openid'] = get_openid ();        //设置数组openid值
      7         $follow = M ( 'follow' )->where ( $map )->find ();        //查表
      8         $is_admin = is_login ();    //使用判断是否登陆方法
      9         $error = '';
     10         if ($data ['end_time'] <= time ()) {
     11             $error = '活动已结束';
     12         } else if ($data ['max_num'] > 0 && $data ['max_num'] <= $my_count) {        //控制抽奖次数
     13             $error = '您的刮卡机会已用完啦';
     14         } else if ($data ['follower_condtion'] > intval ( $follow ['status'] ) && ! $is_admin) {    //判断领取人权限
     15             switch ($data ['follower_condtion']) {
     16                 case 1 :
     17                     $error = '关注后才能参与';
     18                     break;
     19                 case 2 :
     20                     $error = '用户绑定后才能参与';
     21                     break;
     22                 case 3 :
     23                     $error = '领取会员卡后才能参与';
     24                     break;
     25             }
     26         } else if ($data ['credit_conditon'] > intval ( $follow ['score'] ) && ! $is_admin) {        //判断领取人财富值
     27             $error = '您的财富值不足';
     28         } else if ($data ['credit_bug'] > intval ( $follow ['score'] ) && ! $is_admin) {
     29             $error = '您的财富值不够扣除';
     30         } else if (! empty ( $data ['addon_condition'] )) {
     31             addon_condition_check ( $data ['addon_condition'] ) || $error = '您没权限参与';
     32         }
     33         $this->assign ( 'error', $error );
     34         // 抽奖算法
     35         empty ( $error ) && $this->_lottery ( $data, $prizes, $new_prizes, $my_count, $has, $no_count );
     36         
     37         $this->display ( 'show' );
     38     }
     39     
     40     
     41     // 抽奖算法 中奖概率 = 奖品总数/(预估活动人数*每人抽奖次数)
     42     function _lottery($data, $prizes, $new_prizes, $my_count = 0, $has = array(), $no_count = 0) {
     43         $max_num = empty ( $data ['max_num'] ) ? 1 : $data ['max_num'];
     44         $count = $data ['predict_num'] * $max_num; // 总基数
     45 
     46         foreach ( $prizes as $p ) {        // 获取已经中过的奖
     47             $prizesArr [$p ['id']] = $p;
     48             
     49             $prize_num = $p ['num'] - $has [$p ['id']];        //剩余中奖数
     50             for($i = 0; $i < $prize_num; $i ++) {
     51                 $rand [] = $p ['id']; // 中奖的记录,同时通过ID可以知道中的是哪个奖
     52             }
     53         }
     54         // dump ( $rand );
     55         // dump ( $prizesArr );
     56         
     57         if ($data ['predict_num'] != 1) {
     58             $remain = $count - count ( $rand ) - $no_count;
     59             $remain > 5000 && $remain = 5000; // 防止数组过大导致内存溢出
     60             for($i = 0; $i < $remain; $i ++) {
     61                 $rand [] = 0; // 不中奖的记录
     62             }
     63         }
     64         if (empty ( $rand )) {
     65             $rand [] = - 1;
     66         }
     67         
     68         shuffle ( $rand ); // 所有记录随机排序
     69         $prize_id = $rand [0]; // 第一个记录作为当前用户的中奖记录
     70         $prize = array ();
     71         
     72         if ($prize_id > 0) {        //判断中奖情况
     73             $prize = $prizesArr [$prize_id];
     74         } elseif ($prize_id == - 1) {
     75             $prize ['id'] = 0;
     76             $prize ['title'] = '奖品已抽完';
     77         } else {
     78             $prize ['id'] = 0;
     79             $prize ['title'] = '谢谢参与';
     80         }
     81 
     82         // 获取我的抽奖机会
     83         if (empty ( $data ['max_num'] )) {
     84             $prize ['count'] = 1;
     85         } else {
     86             $prize ['count'] = $max_num - $my_count - 1;
     87             $prize ['count'] < 0 && $prize ['count'] = 0;
     88         }
     89         
     90 //         dump ( $prize );
     91         $this->assign ( 'prize', $prize );
     92     }
     93     
     94     // 记录中奖数据到数据库
     95     function set_sn_code() {
     96         //设置数据数组
     97         $data ['sn'] = uniqid ();
     98         $data ['uid'] = $this->mid;
     99         $data ['cTime'] = time ();
    100         $data ['addon'] = 'Scratch';
    101         $data ['target_id'] = I ( 'id' );
    102         
    103         $data ['prize_id'] = $map ['id'] = I ( 'prize_id' );
    104         
    105         $title = '';
    106         if (! empty ( $map ['id'] )) {    //确定奖品标题
    107             $title = M ( 'prize' )->where ( $map )->getField ( 'title' );
    108             $title || $title = '';
    109         }
    110         $data ['prize_title'] = $title;
    111         // dump ( $data );
    112         
    113         $res = M ( 'sn_code' )->add ( $data );    //添加sn码
    114         if ($res) {
    115             // 更新获取数
    116             M ( "scratch" )->where ( 'id=' . $data ['target_id'] )->setInc ( "collect_count" );
    117             
    118             // 扣除积分
    119             $data = M ( 'scratch' )->find ( $data ['target_id'] );
    120             if (! empty ( $data ['credit_bug'] )) {
    121                 $credit ['score'] = $data ['credit_bug'];
    122                 $credit ['experience'] = 0;
    123                 add_credit ( 'scratch_credit_bug', 5, $credit );
    124             }
    125         }
    126         echo $res;
    127     }
    128 }
  • 相关阅读:
    正则与普通方法对字符串过滤的比较
    java基础练习笔记
    node.js-express路由基础+获取前端数据+rmvc架构开发
    解决powershell因为在此系统上禁止运行脚本"报错
    树、森林、二叉树的转换
    git提交代码时如何不提交node_modules文件
    node.js-静态资源目录搭建
    node.js路由基础
    sql server查询练习
    MYQL存储过程与事件
  • 原文地址:https://www.cnblogs.com/dennr/p/4606558.html
Copyright © 2011-2022 走看看