request->token; if ($token['isEmployee']) return json(['code' => 1, 'msg' => '您的身份是业务员,不能参加活动']); $data = $this->request->only(['actid','empid']); $ms=LotteryActivity::where([['end_date','<',date('Y-m-d')],['root_id','=',$token['root_org']],['status','=',1]])->update(['status'=>2]); $you=LotteryUser::where([['uid','=',$token['uid']],['actid','=',$data['actid']]])->find(); $act_data=LotteryActivity::with(['company'=>function($query){ $query->field('root_id,company_name,tel,company_address'); },'good'=> function($query) { $query->field('actid,good_name,good_img,id'); }])->where([['id','=',$data['actid']],['status','=',1]])->field('id,lottery_num,start_date,end_date,share_count,root_id,type,title,lottery_tel,lottery_address,shareimg')->find(); if(empty($act_data)){ return json(['code' => 1,'msg' => '活动不存在或者已结束']); } $egg_status_log=null; if(empty($you)){ if(empty($data['empid'])) return json(['code' => 1, 'msg' => '缺少员工id']); $you= new LotteryUser; if($act_data['type']==2){ for($i=1;$i<10;$i++){ $log[]=array('id'=>$i,'status'=>false,'good_name'=>null); } $egg_status_log=json_encode($log); } $you->uid=$token['uid']; $you->empid=$data['empid']; $you->lottery_num=$act_data['lottery_num']; $you->actid=$act_data['id']; $you->egg_status_log=$egg_status_log; $you->save(); } $user_data=array( 'lottery'=>$you['lottery_num'], 'share_status'=>!empty($you['share_img'])?2:1, 'egg_status_log'=>$you['egg_status_log'] ); $data=['user_data'=>$user_data,'act_data'=>$act_data]; return json(['code' => 0, 'data'=>$data ,'msg' => '请求成功.']); } //用户抽奖页面中奖用户显示 public function user_detail_lukus() { $token = $this->request->token; $data = $this->request->only(['actid']); $list=LotteryLuckyUser::with(['user'=>function($query){ $query->field('id,nickname,phone'); },'good'=>function($query){ $query->field('id,good_name'); }])->where('actid','=',$data['actid']) ->field('id,uid,good_id,actid') ->select(); return json(['code' => 0, 'data'=>$list ,'msg' => '请求成功.']); } //砸金蛋活动详情 public function egg_act_detail() { $token = $this->request->token; $data = $this->request->only(['actid','empid']); $act_data=LotteryActivity::with(['good'=> function($query) { $query->field('actid,good_name,good_img'); }, 'company'=>function($query){ $query->field('root_id,company_name,tel,company_address'); }]) ->where([['status','=',1],['type','=',2],['root_id','=',$token['root_org']]]) ->find(); return json(['code' => 0, 'data'=>empty($act_data) ? null:$act_data->toArray() ,'msg' => '请求成功.']); } //活动详情 public function act_detail() { $token = $this->request->token; $data = $this->request->only(['actid','empid']); $act_data=LotteryActivity::with(['good'=> function($query) { $query->field('actid,good_name,good_img'); }, 'company'=>function($query){ $query->field('root_id,company_name,tel,company_address'); }]) ->where([['status','=',1],['type','=',1],['root_id','=',$token['root_org']]]) ->find(); return json(['code' => 0, 'data'=>empty($act_data) ? null:$act_data->toArray(),'msg' => '请求成功.']); } //活动转发记录 public function act_forward_log() { $token = $this->request->token; $data = $this->request->only(['actid']); $act_data=LotteryActivity::where('id',$data['actid'])->find(); if(!empty($act_data['share_log'])){ $log=json_decode($act_data['share_log'],true); $isup=0; foreach($log as $key=>$val){ if($val['id']==$token['employee_id']){ $val['num']++; $isup=1; } $xin[]=$val; } if(empty($isup)){ $xin[]=['id'=>$token['employee_id'],'num'=>1]; } }else{ $xin[]=array('id'=>$token['employee_id'],'num'=>1); } $act_data->share_num=$act_data['share_num']+1; $act_data->share_log=json_encode($xin); $ms=$act_data->save(); if($ms){ return json(['code' => 0,'msg' => '请求成功.']); }else{ return json(['code' => 1, 'msg' => '请求失败.']); } } //用户上传截图 public function user_upimg() { $token = $this->request->token; $share_img=$this->request->post('img'); $data = $this->request->only(['actid']); $data['share_img']=$share_img; $user_data=LotteryUser::where([['uid','=',$token['uid']],['actid','=',$data['actid']]])->find(); if($user_data['lottery_num']==0 && empty($user_data['share_img'])){ $user_data->share_img=$data['share_img']; $user_data->lottery_num=1; $ms=$user_data->save(); } if(!empty($ms)){ return json(['code' => 0,'msg' => '上传成功,已经获取抽奖机会']); }else{ return json(['code' => 1,'msg' => '上传失败,或已经上传过图片']); } } //用户中奖记录 public function user_lucky_list() { $token = $this->request->token; $data = $this->request->only(['actid']); $list= LotteryLuckyUser::with(['good'=> function($query) { $query->field('id,good_name,good_img'); }]) ->where([['uid','=',$token['uid']],['actid','=',$data['actid']]]) ->order('id desc') ->select() ->toArray(); return json(['code' => 0,'data'=>$list,'msg' => '请求成功.']); } //员工查看所有用户中奖记录 public function emp_user_lucky_list() { $token = $this->request->token; if (!$token['isEmployee']) return json(['code' => 1, 'msg' => '您不是员工,无权查看']); $data = $this->request->only(['actid']); $list=LotteryLuckyUser::with(['good'=>function($query){ $query->field('id,good_name,good_img'); },'user'=>function($query){ $query->field('id,nickname,headimgurl,phone'); }]) ->where([['actid','=',$data['actid']],['empid','=',$token['employee_id']]]) ->order('id desc') ->select() ->toArray(); return json(['code' => 0,'data'=>$list,'msg' => '请求成功.']); } //员工查看所有未中奖用户记录 public function emp_user_no_lucky_list() { $token = $this->request->token; if (!$token['isEmployee']) return json(['code' => 1, 'msg' => '您不是员工,无权查看']); $data = $this->request->only(['actid']); $list=LotteryUser::with(['user'=>function($query){ $query->field('id,nickname,headimgurl,phone'); }]) ->where([['actid','=',$data['actid']],['is_prize','=',0],['empid','=',$token['employee_id']]]) ->select() ->toArray(); return json(['code' => 0,'data'=>$list,'msg' => '请求成功.']); } //员工页面中奖统计 public function emp_user_lucky_statistics() { $token = $this->request->token; if (!$token['isEmployee']) return json(['code' => 1, 'msg' => '您不是员工,无权查看']); $data = $this->request->only(['actid']); $act_data=LotteryActivity::where([['id','=',$data['actid']],['root_id','=',$token['root_org']]])->find(); $zf=0; foreach(json_decode($act_data['share_log'],true) as $key=>$val){ if($token['employee_id']==$val['id']){ $zf=$val['num']; } } $is_lucky=LotteryLuckyUser::where([['actid','=',$data['actid']],['empid','=',$token['employee_id']]]) ->group('uid') ->count(); $lucky_num=LotteryUser::where([['actid','=',$data['actid']],['empid','=',$token['employee_id']]])->sum('is_lottery'); $data=['zfnum'=>$zf,'is_lucky'=>$is_lucky,'lucky_num'=>$lucky_num]; return json(['code' => 0,'data'=>$data,'msg' => '请求成功.']); } //用户抽奖 public function user_lottery() { $token = $this->request->token; $data = $this->request->only(['actid','eggid']); if ($token['isEmployee']) return json(['code' => 1, 'msg' => '您的身份是业务员,不能参加活动']); $luck_data=LotteryUser::where([['uid','=',$token['uid']],['actid','=',$data['actid']]])->find(); $act_data=LotteryActivity::find($data['actid']); if($act_data['status']==2 || ($act_data['end_date'] < date('Y-m-d',time()))){ return json(['code' => 1, 'msg' => '活动已经结束']); } if($luck_data['lottery_num']<=0){ return json(['code' => 1, 'msg' => '抽奖次数已经用完']); } $goodid=$this->get_rand($data['actid']); $is_share_yes=0; if(!empty($luck_data['share_img'])){ $is_share_yes=1; } Db::startTrans(); try { if(!empty($goodid)&& $goodid>0){ $add=array( 'uid'=>$token['uid'], 'actid'=>$data['actid'], 'good_id'=>$goodid, 'wiped_sn'=>str_rand(6), 'empid'=>$luck_data['empid'], 'is_share_yes'=>$is_share_yes ); $good_data=LotteryActivityGoods::find($goodid); if($good_data['surplus']<=0){ return json(['code' => 1, 'msg' => '奖品已中完']); } $good_data->surplus= Db::raw('surplus-1'); $good_data->save(); LotteryLuckyUser::insert($add); $luck_data->is_prize = 1; } if($act_data['type']==2){ if(empty($data['eggid'])) return json(['code' => 1, 'msg' => '金蛋id为空']); foreach(json_decode($luck_data['egg_status_log'],true) as $key=>$val){ if($data['eggid']==$val['id']){ $val['status']=true; if(!empty($goodid)&& $goodid>0){ $val['good_name']=$good_data['good_name']; } } $p[]=$val; } $luck_data->egg_status_log=json_encode($p); } $luck_data->lottery_num = Db::raw('lottery_num-1'); $luck_data->is_lottery = Db::raw('is_lottery+1'); $luck_data->save(); $this->add_foots($act_data); Db::commit(); }catch (\Exception $e) { Db::rollback(); return json(['code' => 1, 'msg' => '录入数据失败.']); } return json(['code' => 0, 'data'=>$goodid ,'msg' => '请求成功.']); } //添加足迹 public function add_foots($act_data) { $token = $this->request->token; //$act_data = LotteryActivity::find($act_data); $luck_data = LotteryUser::where([['uid', '=', $token['uid']], ['actid', '=', $act_data['id']]])->find(); $luck_good = LotteryLuckyUser::with(['good' => function ($query) { $query->field('id,good_name'); }])->where([['uid', '=', $token['uid']], ['actid', '=', $act_data['id']]])->select()->toArray(); $luckname = ''; if (!empty($luck_good)) { foreach ($luck_good as $key => $val) { $xin[$val['good_id']][] = $val; } foreach ($xin as $key => $val) { $luckname .= $val[0]['good']['good_name'] . count($val) . '个,'; } $luckname = trim($luckname, ','); } $updata = ['actid' => $act_data['id'], 'type' => $act_data['type'], 'title' => $act_data['title'], 'luckname' => $luckname]; $you = ModelFootprints::where([['uid', '=', $token['uid']], ['employee_id', '=', $luck_data['empid']], ['pipe_type', '=', 'lottery'], ['reg_info', 'like', '{"actid":' . $act_data['id'] . ',%']])->find(); if ($you) { $you->reg_info = json_encode($updata); $you->save(); } else { event(new FootPrints($token['uid'], $luck_data['empid'], $token['root_org'], $updata, 'lottery')); } } public function get_rand($actid){ $allpr=0; $list=LotteryActivityGoods::where([['actid','=',$actid],['surplus','<>',0]])->select()->toArray(); foreach($list as $key=>$val){ $as=array( 'id'=>$val['id'], 'name'=>$val['good_name'], 'gailv'=>$val['probability'], 'img'=>$val['good_img'] ); $allpr+=$val['probability']; $goods[]=$as; } $yupr=100-$allpr; $newpr=['id'=>-1,'name'=>'谢谢参与','gailv'=>$yupr,'img'=>'']; $goods[]=$newpr; //中奖数字 $zhongjiang_num = mt_rand(1, 100); //例:55 //读取商品概率 foreach($goods as $v){ $gailv[] = $v['gailv']; } //计算概率总数:此处原则上总数为100,但是不排除有没有谢谢参与这种商品的情况,所以兼容各种概率设定 $num_count = array_sum($gailv); //生成1到100个数字并组成数组 for($i=1;$i<=100;$i++){ $a[] = $i; } //从数组中选出指定个数的随机数并返回键 $b = array_rand($a,$num_count); //由于array_rand读取出的数组中的键,所以多一步将键转化为值的过程 foreach($b as $v){ $c[] = $a[$v]; } //打乱数组排序 shuffle($c); foreach($goods as $k => $v){ //如果概率不是0 if($v['gailv'] > 0){ $num_sub = []; if($v['gailv'] > 1){ $num_sub_key = array_rand($c,$v['gailv']); foreach($num_sub_key as $vv){ $num_sub[] = $c[$vv]; unset($c[$vv]); } }else{ $num_sub_key = array_rand($c); $num_sub[] = $c[$num_sub_key]; unset($c[$num_sub_key]); } $c = array_values($c); $goods[$k]['gailv_num'] = $num_sub; }else{ //永远中不到的商品的值设为999,永远匹配不到 $goods[$k]['gailv_num'][] = 999; } } //检测商品是否中奖了 foreach($goods as $v){ if(in_array($zhongjiang_num, $v['gailv_num'])){ //恭喜您中奖了,虽然中的可能是谢谢参与 return $v['id'];//返回中奖的商品ID } } //一个都没中,当有谢谢参与的商品时,走不到这里,只有概率相加小于100时,可能走到这里 return FALSE; } }