<?php namespace api\portal\controller; use cmf\controller\RestBaseController; use Think\Db; use api\portal\service\ParamService; /** * @title 签到 * @description 签到相关接口 */ class SignController extends RestBaseController { /** * @title 首页接口 * @description 麦夫子首页渲染 * @author panhaowen * @url /portal/Sign/index * @method POST * @header name:XX-Token require:1 default: desc:token * @return sign:1是早打卡,2是午打卡,3是晚打卡,4是睡前打卡,0不能打卡 * @return slogan:口号 */ public function index() { $re=Db::name('config')->where('id',1)->find(); $data['morning_sign_time']=date('H:i',$re['morning_sign_time']); $data['morning_sign_end_time']=date('H:i',$re['morning_sign_end_time']); $data['noon_sign_time']=date('H:i',$re['noon_sign_time']); $data['noon_sign_end_time']=date('H:i',$re['noon_sign_end_time']); $data['night_sign_time']=date('H:i',$re['night_sign_time']); $data['night_sign_end_time']=date('H:i',$re['night_sign_end_time']); $data['sleep_sign_time']=date('H:i',$re['sleep_sign_time']); $data['sleep_sign_end_time']=date('H:i',$re['sleep_sign_end_time']); $time=date('H:i:s',time()); $beginToday=mktime(0,0,0,date('m'),date('d'),date('Y')); $endToday=mktime(0,0,0,date('m'),date('d')+1,date('Y'))-1; $user_sign=Db::name('user_sign')->where(['user_id'=>$this->getUserId(),'create_time'=>[ 'between time', [$beginToday,$endToday]]])->find(); if ($time>$data['morning_sign_time']&&$time<$data['morning_sign_end_time']){ if ($user_sign['morning']!=null) { $data['sign'] = 0; }else{ $data['sign'] = 1; } $data['start_time']=$data['morning_sign_time']; $data['end_time']=$data['morning_sign_end_time']; }else if ($time>$data['noon_sign_time']&&$time<$data['noon_sign_end_time']){ if ($user_sign['noon']!=null) { $data['sign'] = 0; }else{ $data['sign'] = 2; } $data['start_time']=$data['noon_sign_time']; $data['end_time']=$data['noon_sign_end_time']; }else if ($time>$data['night_sign_time']&&$time<$data['night_sign_end_time']){ if ($user_sign['night']!=null) { $data['sign'] = 0; }else{ $data['sign'] = 3; } $data['start_time']=$data['night_sign_time']; $data['end_time']=$data['night_sign_end_time']; }else if ($time>$data['sleep_sign_time']&&$time<$data['sleep_sign_end_time']){ if ($user_sign['sleep']!=null) { $data['sign'] = 0; }else{ $data['sign'] = 4; } $data['start_time']=$data['sleep_sign_time']; $data['end_time']=$data['sleep_sign_end_time']; }else{ if ($time<$data['morning_sign_time']){ $data['start_time']=$data['morning_sign_time']; $data['end_time']=$data['morning_sign_end_time']; }elseif ($time>$data['morning_sign_end_time']&&$time<$data['noon_sign_time']){ $data['start_time']=$data['noon_sign_time']; $data['end_time']=$data['noon_sign_end_time']; }elseif ($time>$data['noon_sign_end_time']&&$time<$data['night_sign_time']){ $data['start_time']=$data['night_sign_time']; $data['end_time']=$data['night_sign_end_time']; }else{ $data['start_time']=$data['sleep_sign_time']; $data['end_time']=$data['sleep_sign_end_time']; } $data['sign']=0; } $this->success('首页信息',array( 'sign'=>$data['sign'], 'slogan'=>$re['slogan'], 'start_time'=>$data['start_time'], 'end_time'=>$data['end_time'], )); } /** * @title 日打卡页面 * @description 麦夫子日打卡页面渲染 * @author panhaowen * @url /portal/Sign/daySign * @method POST * @header name:XX-Token require:1 default: desc:token */ public function daySign(){ //用户信息 $user=Db::name('user')->where('id',$this->getUserId())->find(); //当天签到记录 $beginToday=mktime(0,0,0,date('m'),date('d'),date('Y')); $endToday=mktime(0,0,0,date('m'),date('d')+1,date('Y'))-1; $daySign=Db::name('user_sign')->where(['user_id'=>$user['id'],'create_time'=>[ 'between time', [$beginToday,$endToday]]])->find(); $daySign['morning']=empty($daySign['morning'])?null:date('Y/m/d H:i:s',$daySign['morning']); $daySign['noon']=empty($daySign['noon'])?null:date('Y/m/d H:i:s',$daySign['noon']); $daySign['night']=empty($daySign['night'])?null:date('Y/m/d H:i:s',$daySign['night']); $daySign['sleep']=empty($daySign['sleep'])?null:date('Y/m/d H:i:s',$daySign['sleep']); //返回 $this->success('日打卡信息',array( 'all'=>$user['all_sign_day'], 'last'=>$user['stay_sign_day'], 'longest'=>$user['longest_sign_day'], 'morning'=>$daySign['morning'], 'noon'=>$daySign['noon'], 'night'=>$daySign['night'], 'sleep'=>$daySign['sleep'], )); } /** * @title 日打卡提交 * @description 麦夫子日打卡提交接口 * @author panhaowen * @url /portal/Sign/daySignPost * @method POST * @header name:XX-Token require:1 default: desc:token * @param name:sign type:int require:1 other: desc:日打卡种类 * @return slogan:口号 */ public function daySignPost(){ $param=$this->request->param(); $user=Db::name('user')->where('id',$this->getUserId())->find(); $config=[]; $music=[]; //根据签到种类判断增加积分数 $score=Db::name('config')->where('id',1)->find(); if ($param['status']==1){ //根据星期判断music,image(只有早签到) $date=date("w",time()); //这个可以获取数字星期比如123,注意0是星期日 $config=Db::name('sign_image')->where('date',$date)->find(); $music=json_decode($config['music'],true); $music=$music[rand(0,count($music,0)-1)]; //早签到积分 $score=$score['morning_sign_score']; $type='morning'; }elseif ($param['status']==2){ $score=$score['noon_sign_score']; $type='noon'; }elseif ($param['status']==3){ $score=$score['night_sign_score']; $type='night'; }elseif ($param['status']==4){ $score=$score['sleep_sign_score']; $type='sleep'; } //将签到写入记录 $beginToday=mktime(0,0,0,date('m'),date('d'),date('Y')); $endToday=mktime(0,0,0,date('m'),date('d')+1,date('Y'))-1; $yesterday = strtotime(date("Y-m-d",strtotime("-1 day"))); //已有记录 $re=Db::name('user_sign')->where(['user_id'=>$this->getUserId(),'create_time'=>[ 'between time', [$beginToday,$endToday]]])->find(); if ($re){ //更新打卡 Db::name('user_sign')->where('id',$re['id'])->update(["$type"=>time()]); //判断是否打满了4次 if (!empty($re['morning'])&&!empty($re['noon'])&&!empty($re['night'])&&!empty($re['sleep'])){ Db::name('user_sign')->where('id',$re['id'])->update(['status'=>1]); Db::name('user')->where('id',$this->getUserId())->setInc('all_sign_day',1); //判断是否为连续打卡 $last=Db::name('user_sign')->where(['user_id'=>$this->getUserId(),'status'=>1,'create_time'=>[ 'between time', [$yesterday,$beginToday]]])->find(); if ($user['stay_sign_day']==0||$last) { Db::name('user')->where('id',$this->getUserId())->setInc('all_sign_day',1); //判断最大连续打卡天数 if ($user['stay_sign_day']>$user['longest_sign_day']){ Db::name('user')->where('id',$this->getUserId())->update(['longest_sign_day'=>$user['stay_sign_day']]); } } } } //无记录 else{ Db::name('user_sign')->insert(['user_id'=>$this->getUserId(),'create_time'=>time(),"$type"=>time()]); } //记录打卡积分 Db::name('user')->where('id',$this->getUserId())->setInc('score',$score); Db::name('user_score_log')->insert(['score'=>$score,'create_time'=>time(),'action'=>'打卡','user_id'=>$this->getUserId(),'now_score'=>$user['score']+$score]); //判断是否需要进行周打卡 if (Db::name('user_week_sign')->where(['user_id'=>$this->getUserId(),'create_time'=>[ '<', $beginToday-(7*24*60*60)]])->find()){ $is_week=1; }else{ $is_week=0; } //返回 $this->success('日打卡提交结果',array( 'background'=>cmf_get_image_preview_url($config['image']), 'music'=>cmf_get_file_download_url($music['url']), 'music_name'=>$music['name'], 'score'=>$score, 'week'=>$is_week )); } /** * @title 分享接口 * @description 分享接口结果返回 * @author panhaowen * @url /portal/Sign/share * @method POST * @header name:XX-Token require:1 default: desc:token */ public function share() { //用户信息 $config = Db::name('config')->where('id', 1)->find(); Db::name('user')->where('id',$this->getUserId())->setInc('score',$config['share_score']); $user= Db::name('user')->where('id',$this->getUserId())->find(); Db::name('user_score_log')->insert(['user_id'=>$this->getUserId(),'score'=>$config['share_score'],'now_score'=>$user['score']]); $this->success('分享成功'); } /** * @title 周打卡页面 * @description 麦夫子周打卡页面页面渲染 * @author panhaowen * @url /portal/Sign/weekSign * @method POST * @header name:XX-Token require:1 default: desc:token * @return param:各个参数 * @return record:周打卡记录 */ public function weekSign(){ //用户信息 $user=Db::name('user')->where('id',$this->getUserId())->find(); //判断是否是第一次周打卡 $re=Db::name('user_week_sign')->where('user_id',$user['id'])->order('create_time','desc')->find(); if (!$re){ $param['weight']=$user['before_weight']; $paramService=new ParamService(); $param['status']=$paramService->status($user['before_weight'],$user['height']); $param['increase']=0; $param['overplus']=$paramService->overplus($user['before_weight'],$user['height']); $param['bashBoard']=[$param['overplus']*0.2+$param['weight'],$param['overplus']*0.4+$param['weight'],$param['overplus']*0.6+$param['weight'],$param['overplus']*0.8+$param['weight']]; $record=['day'=>ceil((time()-$user['register_time'])/(60*60*21)),'weight'=> $param['weight'],'status'=>$param['status']]; }else{ $param['weight']=$re['weight']; $param['increase']=$re['weight']-$user['before_weight']; $paramService=new ParamService(); $param['overplus']=$paramService->overplus($user['before_weight'],$user['height'])-($re['weight']-$user['before_weight']); $param['bashBoard']=[$param['overplus']*0.2+$user['weight'],$param['overplus']*0.4+$user['weight'],$param['overplus']*0.6+$user['weight'],$param['overplus']*0.8+$user['weight']]; $record=Db::name('user_week_sign')->where('user_id',$user['id'])->select()->each(function ($item) { if ($item['status']==1){ $item['status']='消瘦'; }elseif ($item['status']==2){ $item['status']='正常'; }elseif ($item['status']==3){ $item['status']='肥胖'; } elseif ($item['status']==4){ $item['status']='超重'; } $item['day']=ceil((time()-$item['register_time'])/(60*60*21)); return $item; }); } $param['day']=ceil((time()-$user['register_time'])/(60*60*21)); $param['pregnant_week']=$user['pregnant_week']; //返回 $this->success('周打卡信息',array( 'param'=>$param, 'record'=>$record )); } /** * @title 周打卡提交 * @description 周打卡提交接口 * @author panhaowen * @url /portal/Sign/weekSignPost * @method POST * @header name:XX-Token require:1 default: desc:token * @return param:各个参数 * @return record:周打卡记录 */ public function weekSignPost(){ $param=$this->request->param(); $user=Db::name('user')->where('id',$this->getUserId())->find(); Db::name('user')->where('id',$this->getUserId())->update(['now_weight'=>$param['weight']]); $paramService=new ParamService(); $param['status']=$paramService->week_status($param['weight'],$user['height']); Db::name('user_week_sign')->insert(['user_id'=>$this->getUserId(),'create_time'=>time(),'weight'=>$param['weight'],'status'=>$param['status']]); //返回 $this->success('周打卡提交成功'); } }