jiangchi(); //我今天已经领取的气泡,数字 $result['my_number'] = $this->get_my_number(); //我今天的应得气泡数量,扣除已经领掉的,最大4个 $qipao_count = $this->get_qipao_count() - count($result['my_number']); $qipao_count = $qipao_count > 4 ? 4 : $qipao_count ; $result['qipao_count'] = $qipao_count; $this->success('success',$result); } //收集一个气泡 public function open_qipao(){ //我今天的应得气泡数量 $qipao_count = $this->get_qipao_count(); //我今天打开的气泡数量 $my_count = Db::name('active_user_number')->where('createdate',date('Ymd'))->where('user_id',$this->auth->id)->count(); if($my_count + 1 > $qipao_count){ $this->error('可收集气泡不足'); } $week = [ 1 => 4, 2 => 4, 3 => 4, 4 => 4, 5 => 4, 6 => 4, 7 => 10, ]; $today_max = $week[date('N')]; if($my_count + 1 > $today_max){ $this->error('今天最多能收集'.$today_max.'个气泡,已到上限'); } $data = [ 'user_id' => $this->auth->id, 'number' => $this->get_rand_number(), 'createtime' => time(), 'createdate' => date('Ymd'), ]; Db::name('active_user_number')->insertGetId($data); $this->success('已收集',$this->get_my_number()); } //开奖 public function active_finish(){ $check = Db::name('active_log')->where('opendate',date('Ymd'))->find(); if(!empty($check)){ $this->error('今天已开奖'); } //中奖号码组。 $box_count_config = [ 1 => 1, 2 => 1, 3 => 2, 4 => 2, 5 => 3, 6 => 3, 7 => 4, ]; $box_count = $box_count_config[date('N')];//今天开N个 //所有已存在的不重复号码,打乱之后,取前N个 $box = Db::name('active_user_number')->where('createdate',date('Ymd'))->group('number')->column('number'); shuffle($box); $box_count = $box_count > count($box) ? count($box) : $box_count; $gift_number = array_chunk($box,$box_count)[0]; //中奖数组,不重复 $gift_number = implode(',',$gift_number); //中奖列表 $list = Db::name('active_user_number')->where('createdate',date('Ymd'))->where('number','IN',$gift_number)->select(); $log_ids = array_column($list,'id');//id更新快一点 //每股中奖额度 $jiangchi = $this->jiangchi(); $price = bcdiv($jiangchi,count($list),0); //发奖结果集 $fajiang = []; foreach($list as $key => $val){ if(isset($fajiang[$val['user_id']])){ $fajiang[$val['user_id']] += 1; }else{ $fajiang[$val['user_id']] = 1; } } Db::startTrans(); //发奖 foreach($fajiang as $key => $val){ $gold = bcmul($val,$price,0); $rs = model('wallet')->lockChangeAccountRemain($key,0,'gold',$gold,91,'第'.date('Ymd').'期'); if($rs['status'] === false){ Db::rollback(); $this->error('开奖失败'); } } //修改状态 $rs = Db::name('active_user_number')->where('id','IN',$log_ids)->update(['gold'=>$price,'status'=>1,'updatetime'=>time()]); if($rs === false){ Db::rollback(); $this->error('开奖失败'); } //开奖记录 $week = [ 1 => '周一', 2 => '周二', 3 => '周三', 4 => '周四', 5 => '周五', 6 => '周六', 7 => '周日', ]; $log = [ 'gift_number' => $gift_number, 'jiangchi' => $jiangchi, 'giftcount' => count($list), 'price' => $price, 'usercount' => count($fajiang), 'opendate' => date('Ymd'), 'openweek' => $week[date('N')], 'createtime' => time(), ]; $log_id = Db::name('active_log')->insertGetId($log); if(!$log_id){ Db::rollback(); $this->error('开奖失败'); } Db::commit(); $this->success('开奖完成'); } //开奖结果 public function active_log(){ $list = Db::name('active_log')->order('id desc')->autopage()->select(); foreach($list as $key => &$val){ $val['opendate'] = '第'.$val['opendate'].'期'; } $this->success('success',$list); } //参与统计 public function my_active_tongji(){ //中奖总额 $gold_sum = Db::name('user_gold_log')->where('user_id',$this->auth->id)->where('log_type',91)->sum('change_value'); //中奖次数 $gift_times = Db::name('user_gold_log')->where('user_id',$this->auth->id)->where('log_type',91)->count('id'); //参与次数 $join_times = Db::name('active_user_number')->where('user_id',$this->auth->id)->group('createdate')->count('id'); $rs = [ 'gold_sum' => $gold_sum, 'gift_times' => $gift_times, 'join_times' => $join_times, ]; $this->success('success',$rs); } //活动参与日志 public function my_active_log(){ } //历史中奖 public function my_gold_log(){ $list = Db::name('user_gold_log')->where('user_id',$this->auth->id)->where('log_type',91)->autopage()->order('id desc')->select(); $this->success('success',$list); } //我今天已经领取的气泡,数字 private function get_my_number(){ $list = Db::name('active_user_number')->where('createdate',date('Ymd'))->where('user_id',$this->auth->id)->order('id asc')->select(); return $list; } //我今天的应得气泡数量 private function get_qipao_count(){ $xiaofei_log_type = '11,12,13,53,59,71,81';//消费金币的log $xiaofei_total = Db::name('user_gold_log')->whereTime('createtime','today')->where('user_id',$this->auth->id)->where('log_type','IN',$xiaofei_log_type) ->sum('change_value'); $xiaofei_total = abs($xiaofei_total); $qipao_value = config('site.active_qipao_value'); //气泡价格 if($qipao_value <= 0){ return 0; //0不能做除数 } $qipao = bcdiv($xiaofei_total,$qipao_value); //金币没有小数点 return intval($qipao); //退一法 } //随机一个中奖号码 private function get_rand_number(){ $min = config('site.active_number_min'); $max = config('site.active_number_max'); return rand($min,$max); } //奖池金额 private function jiangchi(){ $xiaofei_log_type = '11,12,13,53,59,71,81';//消费金币的log //奖池为昨日平台消费总金额百分比 $starttime = strtotime(date('Y-m-d')) - 86400; $endtime = $starttime + 86399; $xiaofei_total = Db::name('user_gold_log')->where('createtime','BETWEEN',[$starttime,$endtime])->where('log_type','IN',$xiaofei_log_type)->sum('change_value'); $xiaofei_total = abs($xiaofei_total); $jiangchi_bili = config('site.active_jiangchi_bili'); $jiangchi = bcdiv(bcmul($xiaofei_total,$jiangchi_bili,0),100,0); //金币没有小数点 return $jiangchi; } }