当前位置:

商城任务、学习任务之每日任务业务逻辑的实现

温馨提示:本文共6038个字,读完预计16分钟。

/*     
     * 用戶每日任務記錄
     *  $data为數組
     * 必填參數
     * alias 别名 'SP', 'YP', 'TZ', 'PYQ', 'SCFX'
     * openid 用戶openID
     * fromid 任务来源id
     * table_name 任务来源表名
     * remark  备注  非必填
     * */
    
    public function zkSetTaskRows($data)
    {
        global $_W;
        global $_GPC;
        $snsSet = m("common")->getPluginset("sns");//sns配置信息
        //判断参数
        $alias = array('SP', 'YP', 'TZ', 'PYQ', 'SCFX');
        $aliasTotitle = array('SP'=>'观看任意学科视频', 'YP'=>'收听任意学科音频', 'TZ'=>'每日发布一个帖子', 'PYQ'=>'分享朋友或朋友圈', 'SCFX'=>'收藏或分享一个产品');
        if(!is_array($data) || $data[‘alias’] == ” || $data[‘openid’] == ” || $data[‘table_name’] == ” || $data[‘fromid’] == ''){
            return '参数缺失';
        }
        if(!in_array($data[‘alias’],$alias)){
            return '别名有误';
        }
        
        //是否開啟每日任務
        $is_open_day = $snsSet[‘is_open_day’];
        if(empty($is_open_day)){
            return '未开启每日任务';
        }
        //获取任务积分
        $task_rows = pdo_fetchall('select alias,credits  from ' . tablename('ewei_shop_sns_daily_task') . ' where uniacid=:uniacid and enabled=1 ', array(':uniacid' => $_W[‘uniacid’]));
        if(empty($task_rows)){
            return '未配置每日任务';
        }
        
        $credits = array();
        foreach($task_rows as $k => $v){
            $credits[$v[‘alias’]] = $v[‘credits’];
        }
        
        //检查当日是否已做任务
        //当日凌晨时间戳
        $day0 = strtotime(date('Y-m-d'));
        $daynow = time();
        $daily_task_rows = pdo_fetch('select id  from ' . tablename('ewei_shop_sns_daily_task_rows') . ' where uniacid=:uniacid and openid=:openid and alias=:alias and ( finishtime>:day0 and finishtime<:daynow ) ', array(':uniacid' => $_W[‘uniacid’], ‘:openid’ => $data[‘openid’], ‘:alias’ => $data[‘alias’], ':day0' => $day0, ':daynow' => $daynow));
        if(empty($daily_task_rows)){
            $data[‘credits’] = $credits[$data[‘alias’]];
            $data[‘finishtime’] = $daynow;
            $data[‘uniacid’] = $_W[‘uniacid’];
            $data[‘isget’] = 0;
            pdo_insert('ewei_shop_sns_daily_task_rows', $data);
            return pdo_insertid();
        }else{
            return '今日任务‘'.$aliasTotitle[$data[‘alias’]].'’已存在';
        }
    }

/*     
     * 获取每日任务进度
     * $openid 用户openID
     * */
    
    public function zkGetDailyTask($openid)
    {
        global $_W;
        global $_GPC;
        if(empty($openid)){
            return '';
        }
        //获取任务列表
        $daily_task = pdo_fetchall('select alias,link,title,displayorder,credits  from ' . tablename('ewei_shop_sns_daily_task') . ' where uniacid=:uniacid and enabled = 1 order by displayorder desc', array(':uniacid' => $_W[‘uniacid’]));
        //获取用户今日完成状态
        $day0 = strtotime(date('Y-m-d'));
        $daynow = time();
        $daily_task_rows = pdo_fetchall('select id,alias,isget,credits  from ' . tablename('ewei_shop_sns_daily_task_rows') . ' where uniacid=:uniacid and openid=:openid and ( finishtime>:day0 and finishtime<:daynow )  order by id ', array(':uniacid' => $_W[‘uniacid’],':openid' => $openid, ':day0' => $day0, ':daynow' => $daynow));
        //封装今日完成任务数据
        $ids = array();//完成任务的id集合
        $isgets = array();//已完成任务是否领取集合
        $alias = array();//任务别名集合
        $credits = array();//任务积分集合
        foreach($daily_task_rows as $k=>$v){
            $ids[$v[‘alias’]] = $v[‘id’];
            $isgets[$v[‘alias’]] = $v[‘isget’];
            $alias[$v[‘alias’]] = $v[‘alias’];
            $credits[$v[‘alias’]] = $v[‘credits’];
        }
        $taskData = array();//签到页面任务数据
        $isfinish = 0;
        foreach($daily_task as $key => $val){
            $taskData[$val[‘alias’]][‘title’] = $val[‘title’];
            $taskData[$val[‘alias’]][‘credits’] = $credits[$val[‘alias’]];
            $taskData[$val[‘alias’]][‘id’] = $ids[$val[‘alias’]];
            if(in_array($val[‘alias’],$alias)){
                $taskData[$val[‘alias’]][‘link’] = 'javascript:;';
                if($isgets[$val[‘alias’]]==0){//未领取
                    $isfinish ++ ;
                    $taskData[$val[‘alias’]][‘bottontxt’] = '领取';
                }else{//已领取
                    $taskData[$val[‘alias’]][‘bottontxt’] = '已领取';
                }
            }else{//未完成
                if(empty($taskData[$val[‘alias’]][‘credits’])){
                    $taskData[$val[‘alias’]][‘credits’] = $val[‘credits’];
                }
                $taskData[$val[‘alias’]][‘bottontxt’] = '去完成';
                $taskData[$val[‘alias’]][‘link’] = $val[‘link’];
            }
        }
        
        
        $res = array();
        $res[‘taskData’] = $taskData;
        $res[‘isfinish’] = $isfinish;
        
        return $res;
    }
    
    
    /*     
     * 领取每日任务积分
     * $openid 用户openID
     * $id 待领取积分的任务记录id
     * */
    
    public function zkSetTaskCredits($openid,$id)
    {
        global $_W;
        global $_GPC;
        $id = intval($id);
        if(empty($openid) || empty($id)){
            return '参数缺失';
        }
        $aliasTotitle = array('SP'=>'观看任意学科视频', 'YP'=>'收听任意学科音频', 'TZ'=>'每日发布一个帖子', 'PYQ'=>'分享朋友或朋友圈', 'SCFX'=>'收藏或分享一个产品');
        
        $day0 = strtotime(date('Y-m-d'));
        $daynow = time();
        $daily_task_row = pdo_fetch('select id,alias,isget,credits,openid  from ' . tablename('ewei_shop_sns_daily_task_rows') . ' where uniacid=:uniacid and openid=:openid and id=:id and ( finishtime>:day0 and finishtime<:daynow ) limit 1 ', array(':uniacid' => $_W[‘uniacid’],':openid' => $openid, ':day0' => $day0, ':daynow' => $daynow, ':id' => $id));
        if(!empty($daily_task_row)){
            if($daily_task_row[‘isget’]==0){
                $credit = intval($daily_task_row[‘credits’]);
                $log = '(来源:'.$aliasTotitle[$daily_task_row[‘alias’]].')';
                //发放积分
                $this->zkSetCredits($openid,$credit,'credit1',$log);
                //更新领取状态
                pdo_update('ewei_shop_sns_daily_task_rows', array('isget' => 1), array('id' => $daily_task_row[‘id’]));
                
                return 1;
            }else{
                return '已领取';
            }
            
        }else{
            return '无奖励可领取';
        }
    }

本文链接:,转发请注明来源!

我要说两句

抱歉,您需要登录后才能留言。