=',date('Y-m-d')]])->whereOr([['end_date','<',date('Y-m-d')]]) ->field('id , cover , title , number, hour, start_date , end_date, end_date as timestate') ->order(['start_date'=>'asc']) ->page($param['page'] , 6) ->select(); foreach ($data as &$item) { //是否结束 if ($item['timestate'] < date('Y-m-d')) { $item['timestate'] = false; } else { $item['timestate'] = true; } } return json(['code'=>0 , 'data'=>$data , 'msg'=>'获取成功']); } /* * 拼团预览 */ public function details($spellgroup_id) { $data = ModelSpellgroup::where([['del','=',0 ], ['publish','=',1], ['id','=',$spellgroup_id]])->field('id , cover , title , number, hour, start_date , end_date , content')->find(); //已拼单数 $data['success_order'] = SpellgroupTeam::where('spellgroup_id',$spellgroup_id)->whereColumn('join_num','>=','number')->sum('join_num'); return json(['code'=>0 , 'data'=>$data , 'msg'=>'获取成功']); } /* * 拼团用户列表 */ public function join_user_list() { $param = Request::only(['spellgroup_id' , 'page' , 'team_id']); $where = [ 'employee_id' => $this->request->token['employee_id'], 'spellgroup_id' => $param['spellgroup_id'], ]; if(isset($param['team_id'])) $where['team_id'] = $param['team_id']; $data = SpellgroupJoin::with(['user'])->where($where)->field('id,join_uid,addtime,status,phone')->page($param['page'] , 15)->select(); return json(['code'=>0 , 'data'=>$data , 'msg'=>'获取成功']); } /* * 拼团团队列表 */ public function join_team_list() { $param = Request::only(['spellgroup_id', 'page']); $data = SpellgroupTeam::with(['spellgroup'])->where(['employee_id'=>$this->request->token['employee_id'] , 'spellgroup_id'=>$param['spellgroup_id']])->field('id,spellgroup_id,open_time,number')->page($param['page'] , 15)->select()->toArray(); if(empty($data)){ return json(['code'=>0 , 'data'=>[] , 'msg'=>'获取成功']); } $tid = array_column($data,'id'); $join = SpellgroupJoin::with(['user'])->where('team_id','in',$tid)->field('team_id,join_uid')->order('addtime desc')->select()->toArray(); foreach($data as &$item) { $item['countdown'] = $this->countdown($item['open_time'] , $item['hour']); $item['join_user'] = []; foreach($join as $val) { if($val['team_id'] == $item['id']) $item['join_user'][] = $val['headimgurl']; } } return json(['code'=>0 , 'data'=>$data , 'msg'=>'获取成功']); } /* * 确认领取 */ public function receive() { $param = Request::only(['id']); $data = SpellgroupJoin::where(['id'=>$param['id'] , 'employee_id'=>$this->request->token['employee_id']])->find(); if(empty($data)) return json(['code'=>1 , 'data'=>$data , 'msg'=>'操作失败']); $data->status = 1; $data->save(); return json(['code'=>0 , 'data'=>$data , 'msg'=>'操作成功']); } /* * 拼团剩余倒计时 */ private function countdown($open_time , $hour) { $start_time = time(); $end_time = strtotime('+'.$hour.'hour',strtotime($open_time)); $t = $end_time - $start_time; if($end_time < $start_time){ return 0; } if($t <= 60){ return $t; }else if($t <= 3600){ $i = intval(floor($t/60)); $s = $t%60; return $i.':'.$s; }else if($t > 3600){ $h = floor($t/3600); $i = floor(($t-3600 * $h)/60); $s = floor($t-($h*3600+$i*60)); return $h.':'.$i.':'.$s; } } //查询用户拼团信息 public function sel_user_group() { $token = $this->request->token; $data = $this->request->only(['teamid','empid']); if ($token['isEmployee']) return json(['code' => 1, 'msg' => '您的身份是业务员,不能参加活动']); if (empty($data['empid'])) return json(['code' => 1, 'msg' => '缺少员工id']); $this->up_overtime_team(); $act_data = ModelSpellgroup::where('root_id','=',$token['root_org']) ->field('cover,content,hour,number,heads_reward_cont,team_member_cont,team_ok_type') ->find(); // 添加足迹 if (!empty($token['uid']) && !$token['isEmployee']) { event(new FootPrints($token['uid'], $token['share_employee'] ?? 0, $token['share_org'] ?? 0, [], 'spellgroup')); } $team_order_num=SpellgroupJoin::count(); //团员状态查询 $tuan=SpellgroupJoin::where([['join_uid','=',$token['uid']],['root_id','=',$token['root_org']]])->order('id desc')->find(); if(empty($data['teamid'])){ if(!empty($tuan)){ $teams=SpellgroupTeam::with(['user'=>function($query){ $query->field('id,nickname'); },'employee'=>function($query){ $query->field('id,name,phone'); }])->where([['id','=',$tuan['team_id']],['root_id','=',$token['root_org']]])->find(); if($tuan['is_heads']==1 && $teams['employee_id']==$data['empid']){ $surplus_time=date('Y-m-d H:i:s',$teams['end_time']); if($teams['status']==3){ $type=5; $text='活动已经结束'; $empdata=['name'=>$teams['employee']['name'],'phone'=>$teams['employee']['phone']]; } if($teams['status']==2){ $type=4; $text='拼团已成功'; $empdata=['name'=>$teams['employee']['name'],'phone'=>$teams['employee']['phone']]; $surplus_time=date('Y-m-d H:i:s',time()); } if($teams['status']==1){ $type=2; $text='邀请邻居拼团'; } $user=['heads_name'=>$teams['user']['nickname'],'text'=>$text,'type'=>$type,'teamid'=>$teams['id'],'is_heads'=>$tuan['is_heads'],'surplus_num'=>$teams['number']-$teams['join_num']]; $team_mer=$this->sel_team_mer($teams['id'],$teams['number']); $act_data->hour=$teams['hour']; $act_data->number=$teams['number']; } if($tuan['is_heads']==1 && $teams['employee_id']!=$data['empid']){ $user=['heads_name'=>null,'text'=>'开启拼团','type'=>1,'teamid'=>null,'is_heads'=>null,'surplus_num'=>$act_data['number']]; $my_teamid=$teams['id']; } if(empty($tuan['is_heads']) && in_array($teams['status'],[2,3])){ $user=['heads_name'=>null,'text'=>'开启拼团','type'=>1,'teamid'=>null,'is_heads'=>null,'surplus_num'=>$act_data['number']]; } if(empty($tuan['is_heads']) && $teams['status']==1){ $my_teamid=$teams['id']; $user=['heads_name'=>null,'text'=>'开启拼团','type'=>1,'teamid'=>null,'is_heads'=>null,'surplus_num'=>$act_data['number']]; //return json(['code'=>1,'msg'=>'正在参加拼团活动,请等待活动结束']); } $data=['team_order_num'=>$team_order_num,'my_teamid'=>!empty($my_teamid)?$my_teamid:null,'act_data'=>$act_data,'empdata'=>!empty($empdata)?$empdata:null,'surplus_time'=>!empty($surplus_time)?$surplus_time:0,'team_mer'=>!empty($team_mer)?$team_mer:$this->send_null_team($act_data['number']),'user'=>$user]; return json(['code'=>0,'data'=>$data,'msg'=>'请求成功']); }else{ $user=['heads_name'=>null,'text'=>'开启拼团','type'=>1,'teamid'=>null,'is_heads'=>null,'surplus_num'=>$act_data['number']]; $data=['team_order_num'=>$team_order_num,'my_teamid'=>!empty($my_teamid)?$my_teamid:null,'act_data'=>$act_data,'empdata'=>!empty($empdata)?$empdata:null,'surplus_time'=>!empty($surplus_time)?$surplus_time:0,'team_mer'=>!empty($team_mer)?$team_mer:$this->send_null_team($act_data['number']),'user'=>$user]; return json(['code'=>0,'data'=>$data,'msg'=>'请求成功']); } } if(!empty($data['teamid'])){ if(!empty($tuan)){ $teams=SpellgroupTeam::with(['user'=>function($query){ $query->field('id,nickname'); },'employee'=>function($query){ $query->field('id,name,phone'); }])->where([['id','=',$tuan['team_id']],['root_id','=',$token['root_org']]])->find(); if($teams['id']==$data['teamid']){ $surplus_time=date('Y-m-d H:i:s',$teams['end_time']); if($teams['status']==3){ $type=5; $text='活动已经结束'; $empdata=['name'=>$teams['employee']['name'],'phone'=>$teams['employee']['phone']]; }if($teams['status']==2){ $type=4; $text='拼团已成功'; $empdata=['name'=>$teams['employee']['name'],'phone'=>$teams['employee']['phone']]; $surplus_time=date('Y-m-d H:i:s',time()); }if($teams['status']==1){ $type=2; $text='邀请邻居拼团'; } $act_data->hour=$teams['hour']; $act_data->number=$teams['number']; $user=['heads_name'=>$teams['user']['nickname'],'text'=>$text,'type'=>$type,'teamid'=>$teams['id'],'is_heads'=>$tuan['is_heads'],'surplus_num'=>$teams['number']-$teams['join_num']]; //$surplus_time=$this->countdown($teams['open_time'] , $teams['hour']); $team_mer=$this->sel_team_mer($teams['id'],$teams['number']); $data=['team_order_num'=>$team_order_num,'my_teamid'=>!empty($my_teamid)?$my_teamid:null,'act_data'=>$act_data,'empdata'=>!empty($empdata)?$empdata:null,'surplus_time'=>!empty($surplus_time)?$surplus_time:0,'team_mer'=>!empty($team_mer)?$team_mer:$this->send_null_team($act_data['number']),'user'=>$user]; }else{ $others_teams=SpellgroupTeam::with(['user'=>function($query){ $query->field('id,nickname'); },'employee'=>function($query){ $query->field('id,name,phone'); }])->where([['id','=',$data['teamid']],['root_id','=',$token['root_org']]])->find(); $my_teamid=$teams['id']; $surplus_time=date('Y-m-d H:i:s',$others_teams['end_time']); if($others_teams['status']==3){ $type=5; $text='活动已经结束'; $empdata=['name'=>$others_teams['employee']['name'],'phone'=>$others_teams['employee']['phone']]; }if($others_teams['status']==2){ $type=4; $text='拼团已成功'; $empdata=['name'=>$others_teams['employee']['name'],'phone'=>$others_teams['employee']['phone']]; $surplus_time=date('Y-m-d H:i:s',time()); }if($others_teams['status']==1){ $type=3; $text='加入拼团'; } $act_data->hour=$others_teams['hour']; $act_data->number=$others_teams['number']; $user=['heads_name'=>$others_teams['user']['nickname'],'text'=>$text,'type'=>$type,'teamid'=>$others_teams['id'],'is_heads'=>null,'surplus_num'=>$others_teams['number']-$others_teams['join_num']]; //$surplus_time=$this->countdown($teams['open_time'] , $teams['hour']); $team_mer=$this->sel_team_mer($others_teams['id'],$others_teams['number']); $data=['team_order_num'=>$team_order_num,'my_teamid'=>!empty($my_teamid)?$my_teamid:null,'act_data'=>$act_data,'empdata'=>!empty($empdata)?$empdata:null,'surplus_time'=>!empty($surplus_time)?$surplus_time:0,'team_mer'=>!empty($team_mer)?$team_mer:$this->send_null_team($act_data['number']),'user'=>$user]; } return json(['code'=>0,'data'=>$data,'msg'=>'请求成功']); }else{ $te=SpellgroupTeam::with(['user'=>function($query){ $query->field('id,nickname'); },'employee'=>function($query){ $query->field('id,name,phone'); }])->where([['id','=',$data['teamid']],['root_id','=',$token['root_org']]])->find(); if(empty($te))return json(['code'=>1,'msg'=>'团队为空']); $surplus_time=date('Y-m-d H:i:s',$te['end_time']); if($te['status']==3){ $type=5; $text='活动已经结束'; $empdata=['name'=>$te['employee']['name'],'phone'=>$te['employee']['phone']]; } if($te['status']==2){ $type=6; $text='该拼团已满员,请联系业务员开启新的拼团'; $empdata=['name'=>$te['employee']['name'],'phone'=>$te['employee']['phone']]; $surplus_time=date('Y-m-d H:i:s',time()); } if($te['status']==1){ $type=3; $text='加入团队'; } $user=['heads_name'=>$te['user']['nickname'],'text'=>$text,'type'=>$type,'teamid'=>$data['teamid'],'is_heads'=>null,'surplus_num'=>$te['number']-$te['join_num']]; $team_mer=$this->sel_team_mer($te['id'],$te['number']); //$surplus_time=$this->countdown($te['open_time'] , $te['hour']); $data=['team_order_num'=>$team_order_num,'my_teamid'=>!empty($my_teamid)?$my_teamid:null,'act_data'=>$act_data,'empdata'=>!empty($empdata)?$empdata:null,'surplus_time'=>!empty($surplus_time)?$surplus_time:0,'team_mer'=>!empty($team_mer)?$team_mer:$this->send_null_team($act_data['number']),'user'=>$user]; return json(['code'=>0,'data'=>$data,'msg'=>'请求成功']); } } } //查询队员情况 public function sel_team_mer($teamid,$num) { //$teamid=1; $list=SpellgroupJoin::with(['user'=>function($query){ $query->field('id,nickname,headimgurl,phone'); }]) ->where('team_id',$teamid) ->field('id,join_uid,is_heads') ->select() ->toArray(); //var_dump($num-count($list)); //exit; $spu=$num-count($list); if(count($list) < $num){ $k=$this->send_null_team($spu); foreach($k as $key=>$val){ $list[]=$val; } } return $list; } //生成空队员数组 public function send_null_team($num) { for($i=0;$i<$num;$i++){ $a=array( 'id'=>null, 'join_uid'=>null, 'is_heads'=>null, 'user'=>array( 'id'=>null, 'nickname'=>null, 'headimgurl'=>null, 'phone'=>null ) ); $new[]=$a; } return $new; } //开启拼团 public function open_team() { $token = $this->request->token; if ($token['isEmployee']) return json(['code' => 1, 'msg' => '您的身份是业务员,不能参加活动']); $data = $this->request->only(['empid']); //$you= SpellgroupTeam::where([['uid','=',$token['uid']],['root_id','=',$token['root_org']]])->find(); //if(!empty($you)) return json(['code' => 1, 'msg' => '您已经参加过队长,不能再次开启拼团']); $you= SpellgroupJoin::with(['team'])->where([['join_uid','=',$token['uid']],['root_id','=',$token['root_org']]])->find(); //var_dump($you->toArray()); //exit; if(!empty($you)){ if($you['team']['status']==1) return json(['code' => 1, 'msg' => '您正在参加其它拼团,暂时不能开启']); if($you['is_heads']==1) return json(['code' => 1, 'msg' => '您已经参加过队长,不能再次开启拼团']); } $act_data = ModelSpellgroup::where('root_id','=',$token['root_org']) ->field('cover,content,hour,number,heads_reward_cont,team_member_cont,team_ok_type,root_id') ->find(); $add=array( 'employee_id'=>$data['empid'], 'number'=>$act_data['number'], 'root_id'=>$act_data['root_id'], 'hour'=>$act_data['hour'], 'uid'=>$token['uid'], 'join_num'=>1, 'end_time'=>$act_data['hour']*3600+time() ); Db::startTrans(); try { $teamid=SpellgroupTeam::insertGetId($add); $new=array( 'join_uid'=>$token['uid'], 'employee_id'=>$data['empid'], 'team_id'=>$teamid, 'root_id'=>$act_data['root_id'], 'is_heads'=>1 ); SpellgroupJoin::insert($new); Db::commit(); }catch (\Exception $e) { Db::rollback(); //var_dump($e->getMessage()); return json(['code' => 1, 'msg' => '开团数据失败.']); } return json(['code' => 0, 'msg' => '开团成功.']); } //加入拼团 public function join_team() { $token = $this->request->token; if ($token['isEmployee']) return json(['code' => 1, 'msg' => '您的身份是业务员,不能参加活动']); $data = $this->request->only(['teamid','empid']); $you= SpellgroupJoin::where([['join_uid','=',$token['uid']],['root_id','=',$token['root_org']]])->find(); if(!empty($you)) return json(['code' => 2, 'msg' => '您已经参加过活动,不能再次加入拼团']); $tmdata=SpellgroupTeam::where([['id','=',$data['teamid']],['root_id','=',$token['root_org']]])->find(); if(empty($tmdata)) return json(['code' => 1, 'msg' => '团队数据不存在']); //if(strtotime($tmdata['open_time'])+$tmdata['hour']*3600 < time()) return json(['code' => 1, 'msg' => '已经超时']); if($tmdata['end_time'] < time()) return json(['code' => 1, 'msg' => '已经超时']); if(in_array($tmdata['status'],[2,3])) return json(['code' => 1, 'msg' => '拼团已经结束']); $add=array( 'join_uid'=>$token['uid'], 'employee_id'=>$data['empid'], 'team_id'=>$data['teamid'], 'root_id'=>$token['root_org'] ); Db::startTrans(); try { $ms=SpellgroupJoin::insert($add); //$tmdata->join_num=Db::raw('join_num + 1'); $tmdata->join_num=$tmdata['join_num'] + 1; $tmdata->save(); if($tmdata['join_num']==$tmdata['number']){ $tmdata->status=2; $tmdata->save(); $this->send_msg($data['empid'],true); } Db::commit(); }catch (\Exception $e) { Db::rollback(); //var_dump($e->getMessage()); return json(['code' => 1, 'msg' => '加入团队数据失败.']); } return json(['code' => 0, 'msg' => '加入成功.']); } //拼团发送消息 private function send_msg($eid,$res=true){ $msg = $res ? '有团队拼团成功了,请及时联系客户领取奖励。' : '有团队拼团失败了,请及时邀请客户参加其他活动。'; $key = $res ? 'spellgroupSuccess' : 'spellgroupFail'; event(new Msg($eid,$msg,$key)); return true; } //查询当前公司是否有活动 public function sel_company_spellact() { $token = $this->request->token; if (!$token['isEmployee']) return json(['code' => 1, 'msg' => '您没有权限查看']); $data=ModelSpellgroup::where('root_id',$token['root_org'])->count(); return json(['code' => 0, 'data'=>$data,'msg' => '获取成功']); } //员工查看拼团列表 public function emp_sel_team_list() { $token = $this->request->token; if (!$token['isEmployee']) return json(['code' => 1, 'msg' => '您没有权限查看']); $this->up_overtime_team(); $data = $this->request->only(['teamid','empid','status','page','limit','starttime']); $where[]=['employee_id','=',$token['employee_id']]; if(!empty($data['status'])){ $where[]=['status','=',$data['status']]; } if(!empty($data['starttime'])){ $where[]=['open_time','>=',$data['starttime'].' 00:00:00']; $where[]=['open_time','<=',$data['starttime'].' 23:59:59']; } $list= SpellgroupTeam::with(['user'=>function($query){ $query->field('id,nickname'); }]) ->field('id,uid,hour,open_time,status,end_time') ->where($where) ->page($data['page'],$data['limit']) ->select() ->toArray(); // var_dump($list); // exit; foreach($list as $key=>$val){ $date = date('Y-m-d',strtotime($val['open_time'])); $list[$key]['date'] = $date; if($val['status']==1){ $list[$key]['surplus_time']=$this->countdown($val['open_time'] , $val['hour']); } if(in_array($val['status'],[2,3])){ //$list[$key]['surplus_time']=date('y-m-d H:i:s',strtotime($val['open_time'])+$val['hour']*3600); $list[$key]['surplus_time']=date('y-m-d H:i:s',$val['end_time']); } $list[$key]['joinuser']=SpellgroupJoin::with(['user'=>function($query){ $query->field('id,headimgurl'); }])->where('team_id',$val['id']) ->field('join_uid,is_heads') //->order('is_heads') ->select()->toArray(); } foreach($list as $key=>$val){ $datas[$val['date']][]=$val; } //var_dump($datas); //exit; return json(['code' => 0, 'list'=>!empty($datas)?$datas:[],'msg' => '请求成功.']); } //员工查看拼团详情 public function emp_sel_team_detail() { $token = $this->request->token; if (!$token['isEmployee']) return json(['code' => 1, 'msg' => '您没有权限查看']); $data = $this->request->only(['teamid']); $team_data=SpellgroupJoin::with(['user'=>function($query){ $query->field('id,nickname,headimgurl,phone'); }]) ->where('team_id',$data['teamid']) ->field('join_uid,addtime,is_heads') ->select() ->toArray(); $tm=SpellgroupTeam::where('id',$data['teamid'])->field('join_num,number')->find(); //$tm['show_join']=$tm['number']-$tm['join_num']; $te_data['team_list']=$team_data; $te_data['show_join']=$tm['number']-$tm['join_num']; //var_dump($team_data); //exit; return json(['code' => 0, 'list'=>$te_data,'msg' => '请求成功.']); } //队长删除下面队员 public function del_team_mer() { $token = $this->request->token; $data = $this->request->only(['id','teamid']); $you=SpellgroupJoin::where([['join_uid','=',$token['uid']],['team_id','=',$data['teamid']],['root_id','=',$token['root_org']]])->find(); if(empty($you)) return json(['code' => 1,'msg' => '队长信息为空']); if($you['is_heads']==1){ SpellgroupJoin::where([['id','=',$data['id']],['team_id','=',$data['teamid']]])->delete(); SpellgroupTeam::where([['id','=',$data['teamid']],['uid','=',$token['uid']]])->dec('join_num') ->update(); return json(['code' => 0,'msg' => '删除成功.']); }else{ return json(['code' => 1, 'msg' => '你没有权限删除.']); } } //查询已经超时的团队 public function up_overtime_team() { $token = $this->request->token; $w[] = ['root_id','=',$token['root_org']]; $w[] = ['end_time','<=',time()]; $w[] = ['status','=',1]; $eids = SpellgroupTeam::where($w)->column('employee_id'); foreach ($eids as $v) { $this->send_msg($v,false); } SpellgroupTeam::where($w)->update(['status'=>3]); } }