123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386 |
- <?php
- namespace app\api\controller;
- use think\facade\Request;
- use app\model\Org;
- use app\model\Employee;
- use app\model\LotteryActivity;
- use app\model\LotteryUser;
- use app\model\LotteryActivityGoods;
- use app\model\LotteryLuckyUser;
- use app\model\Company;
- use think\facade\Db;
- use app\event\FootPrints;
- use app\model\Footprints as ModelFootprints;
- class Lottery extends Base
- {
- //添加抽奖用户
- public function add_user()
- {
- $token = $this->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;
- }
- }
|