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')->whereTime('createtime','today')->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(), ]; 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')->whereTime('createtime','today')->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')->whereTime('createtime','today')->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('开奖失败'); } //开奖记录 $log = [ 'gift_number' => $gift_number, 'jiangchi' => $jiangchi, 'giftcount' => count($list), 'price' => $price, 'usercount' => count($fajiang), 'opendate' => date('Ymd'), 'createtime' => time(), ]; $log_id = Db::name('active_log')->insertGetId($log); if(!$log_id){ Db::rollback(); $this->error('开奖失败'); } Db::commit(); $this->success('开奖完成'); } //开奖结果 public function active_result(){} //参与统计 //参与日志 //历史中奖 //我今天已经领取的气泡,数字 private function get_my_number(){ $list = Db::name('active_user_number')->whereTime('createtime','today')->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; } }