tp5实现每日连续签到

思路:

  1. 获取当前时间,根据当前时间获取前一天时间
  2. 在签到表中判断前天是否打卡
  3. 在前一天表中找到信息,则为每天连续打卡;若未找到信息,则可能是断签或者是第一天打卡
  4. 使用事务更新所需要的表

使用的表:
1.签到表:用户id 签到时间 获得积分
2.用户表:连续签到天数 总积分

代码直接上

工具方法 放在工具类中
    //验证数组是否存在
    public static function havedata($array)
    {
        if (isset($array) && !empty($array)) {
            return true;
        } else {
            return false;
        }
    }

    //获取指定时间间隔的是时间戳
    public static function getLastTime($day,$type="before"){
        $data = array();
        if($type == "before"){
            $str = date("Y-m-d",strtotime("-{$day} day"))." 0:0:0";
            $data["start"] = strtotime($str);
            $str = date("Y-m-d",strtotime("-{$day} day"))." 24:00:00";
            $data["end"] = strtotime($str);
        }else{
            $str = date("Y-m-d",strtotime("+{$day} day"))." 0:0:0";
            $data["start"] = strtotime($str);
            $str = date("Y-m-d",strtotime("+{$day} day"))." 24:00:00";
            $data["end"] = strtotime($str);
        }
        return $data;
    }
 签到控制器
        $now_time = strtotime(date("Y-m-d 0:0:0",time()));//获取当前时间
        $info = $signOn->Exist($now_time,$userId);//在签到表中判断时候存在签到
        $integral = 0;
        $userInfo = $user->getInfoById("integral,continuity_day",$userId);//查询用户积分和签到天数
        if (Util::havedata($info)){//
            dumpJson(REPERROR,"您今天已经签到过了");
        }else{
            $yestaday = Util::getLastTime(1,'before');//获取前一天时间
            $existYestasySignOn = $signOn->checkSignOn($yestaday['start'],$yestaday['end'],$userId);//检查是否连续签到
            if ($existYestasySignOn){//连续签到
            	//连续签到操作  	
            	}
            }else{//断签和第一次签到
				//断签和一次签到操作
            }
 			//准备需要修改的数据
 			
            //开始事务
            Db::startTrans();
            try{
				//执行操作
                if (//判断操作是否成功){
                	//操作成功,提交sql
                    Db::commit();
                }else{
                	//操作失败,回滚数据
                    Db::rollback();
                }
            }catch (\Exception $e){
            	//操作失败,回滚数据
                Db::rollback();
            }
        }

思路仅供参考,有好的操作,请大家提出,谢谢

你可能感兴趣的:(PHP,TP)