php设计 点击签到,补签,补签卡设计,签到获取连签天数,连签获取奖励

/**
    * 点击签到(签到和补签是一个接口)
    * @ApiInternal
    * @ApiTitle    (点击签到)
    * @ApiSummary  (点击签到)
    * @ApiMethod   (POST)
    * @ApiParams  (name="time", type="integer", required="false", description="时间(每个月的日期比如5月1就传1)")
    * @ApiReturnParams (name="num", type="float", required=true,description="数量")
    * @ApiReturn   ()
    */
    public function sign__log(){
        $user = $this->auth->getUser();
        $time = $this->request->param('time');
        $year = date('Y',time());
        $month = date('m',time());
        $day = date('d',time());
        $days = date("t"); 
        $where = [
            'year' => $year,
            'month' => $month,
            'day' => $time,
        ];
        $is_sgin = Db::name('sign_log')->where($where)->find();
        if($is_sgin){
            $this->error('已经签过到了');
        }
        
        $sign_log = [
            'user_id' => $user['id'],
            'year' => $year,
            'month' => $month,
            'day' => $time,
            'createtime' => time(),
        ];
        if($time <= $day){
            if($time < $day){
                // 是否有补签卡
                if($user['signature_num'] <= 0){
                    $this->error('抱歉,您暂时没有可用的补签次数');
                }
                // 减去补签卡次数
                Db::name('user')->where('id',$user['id'])->setDec('signature_num');

                // 是补签
                $sign_log['is_repair'] = 1;
                $memo = '补签获得';
            }else{
                $sign_log['is_repair'] = 0;
                $memo = '签到获得';
            }

            // 签到 sign_log
           
            Db::name('sign_log')->insert($sign_log);
            $i = $this->exticle();
            // 签到送积分
            //根据$i是连续签到的第几天进行分发奖励
            $give_score = 获得的积分数量; 
            // 存入积分表,加上积分
            $saveuser['score'] = $user['score'] + $give_score;
            $user_score_log = [
                'user_id' => $user['id'],
                'score' => $give_score,
                'before' => $user['score'],
                'after' => $user['score'] + $give_score,
                'memo' => $memo,
                'createtime' => time(),
            ];
            Db::name('user_score_log')->insert($user_score_log);
            //存入
            $saveuser['count_sign'] = $user['count_sign'] + 1;
            if($user['continuity_sign'] != $i){
                $saveuser['continuity_sign'] = $i;
            }
            Db::name('user')->where('id',$user['id'])->update($saveuser);
            if($time < $day){
                $this->success('恭喜您,补签成功!',$i);
            }else{
                $this->success('恭喜您,签到成功!',$i);
            }
        }else{
            $this->error('还没有到日期哦');
        }
        
    }
    //获取连签的天数
    public function exticle(){
        $user = $this->auth->getUser();
        $year = date('Y',time());
        $month = date('m',time());
        // $month = 5;
        $day = date('d',time());
        // $day = 31;
        $thismonth = Db::name('sign_log')->field('day')->where(array('user_id'=>$user['id'],'year'=>$year,'month'=>$month))->order('day DESC')->select();
        foreach($thismonth as $v){
            $touch[] = $v['day'];
        }
        // var_dump($touch);exit;
        if(count($thismonth) != 0){
            if(count($touch) > 2){
                if(in_array($day,$touch) || in_array($day-1,$touch)){
                    // 今天 
                    for ($x=0; $x<count($touch)-1; $x++) {
                        if($touch[$x] - $touch[$x+1] > 1){
                            $i = $x + 1;
                        }
                    } 
                    if(!isset($i)){
                        $i = count($touch);
                    }
                }else{
                    //今天昨天都没有,连签变为0
                    $i = 0;
                }
            }else{
                if(count($touch) == 1){
                    if($touch[0] == $day || $touch[0] == $day-1){
                        $i = 1;
                    }else{
                        $i = 0;
                    }
                }else if(count($touch) == 2){
                    if($touch[0] == $day || $touch[0] == $day-1){
                        if($touch[0] - $touch[1] == 1){
                            $i = 2;
                        }else{
                            $i = 1;
                        }
                    }else{
                        $i = 0;
                    }
                }
            }
        }else{
            $i = 0;
        }
        return $i;
    }

表设计
在这里插入图片描述
在这里插入图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值