Пример #1
0
 /**
  * 检查签到任务
  *
  * @param array $task
  * @param int $uid
  *
  * @return mixed
  */
 public function check($task, $uid)
 {
     $this->task = $task;
     $this->uid = $uid;
     /**
      * 签到任务是否以前签过到了
      */
     $model = new Model();
     $check_sign = $model->find('select * from video_user_check_sign where uid=:uid', array('uid' => $uid));
     if (!$check_sign) {
         return 'can_apply';
     }
     if ($task['relatedid']) {
         $isDo = $model->find('select * from video_task_user where relatedid=? and uid=?', array($task['relatedid'], $user['uid']));
         // 当没有申请或者没有完成父任务时
         if (!$isDo || $isDo['status'] != 1) {
             return 'can_apply';
         }
     }
     /**
      * 计算差值
      */
     $s = date('Ymd', time()) - date('Ymd', strtotime($check_sign['last_time']));
     if ($s == 0) {
         return 'all';
     }
     if ($s >= 1) {
         return 'can_apply';
     }
 }
Пример #2
0
 /**
  * 检查首次预约的任务
  *
  * @param $task
  * @param $uid
  *
  * @return mixed
  */
 public function check($task, $uid)
 {
     $this->task = $task;
     $this->uid = $uid;
     $model = new Model();
     $userTask = $model->find('select * from video_task_user where vtask_id=' . $task['vtask_id'] . ' and uid=' . $uid);
     $user = $model->find('select * from video_user where uid=' . $uid);
     if ($task['pre_vtask_id']) {
         $isDo = $model->find('select * from video_task_user where vtask_id=? and uid=?', array($task['pre_vtask_id'], $user['uid']));
         // 当没有申请或者没有完成父任务时
         if (!$isDo || $isDo['status'] != 1) {
             return 'can_apply';
         }
     }
     /**
      * 如果没有接任务的话,就判断是否可以自动申请任务
      */
     if (!$userTask) {
         /**
          * 只要用户满足做这个任务的条件就要插入一条数据 等待预约的验证
          */
         $c = serialize(array('csc' => 0, 'update_time' => time()));
         $data = array('uid' => $uid, 'vtask_id' => $task['vtask_id'], 'status' => 0, 'csc' => $c, 'apply_date' => time(), 'init_time' => date('Y-m-d H:i:s'), 'dml_time' => date('Y-m-d H:i:s'), 'dml_flag' => 1);
         $model->add('video_task_user', $data);
         // 增加一个申请人数
         $this->updateTaskApplicants($task);
         return 'doing';
     }
     $ut = $userTask;
     $csc = unserialize($ut['csc']);
     if ($ut['status'] == 1) {
         return 'all';
     }
     if ($ut['status'] == -1) {
         return 'failed';
     }
     if ($ut['status'] == 0 && $csc['csc'] == 100) {
         return 'success';
     }
     /**
      * 当没有完成的时候要检查进度
      */
     if ($ut['status'] == 0 && $csc['csc'] != 100) {
         /**
          * 检查是否完成了预约,是就更新状态
          * 要求在申请任务之后 预约的才算
          */
         $invite = $model->find('select * from video_room_duration where invitetime>? and reuid=?', array($ut['apply_date'], $uid));
         if ($invite) {
             $data = array();
             $csc['csc'] = 100;
             $csc['update_time'] = time();
             $data['csc'] = serialize($csc);
             $model->flush('video_task_user', $data, array('auto_id' => $ut['auto_id']));
             return 'success';
         }
         return 'doing';
     }
 }
Пример #3
0
 /**
  * 检测用户任务对应的状态的问题
  * @param $task  array 某条任务
  * @param $uid  int 某个用户
  *
  * @return mixed
  * <p>
  *  返回 FALSE 则表示任务失败
  *  返回 TRUE 则表示任务用户可以做
  *  返回 array进度的数组 则根据情况更新
  * </p>
  */
 public function checkTask($task, $uid)
 {
     $this->task = $task;
     $this->user = $uid;
     /**
      * 当为period 为 0 一次性的任务的时候 判断是否已经完成
      * 后面各种任务脚本中就不用再判断此任务了
      */
     if ($task['period'] == 0) {
         $model = new Model();
         $taskUser = $model->find('select * from video_task_user where vtask_id=' . $task['vtask_id'] . ' and uid=' . $uid);
         // 当task_user 的status 为 1的时候就表示完成且领奖了
         if ($taskUser && $taskUser['status'] == 1) {
             return 'all';
         }
     }
     /**
      * 进行检查和更新各个任务的状态 调用各任务脚本
      */
     $script = $task['script_name'];
     $className = 'App\\Service\\Task\\TaskScript\\' . ucfirst($this->script[$script]);
     // 暂时做了doctrine($this->em)的手动注入 未走service
     $class = new $className();
     return $class->check($task, $uid);
 }
Пример #4
0
 /**
  * 添加用户的礼物到背包中
  *
  * @param $gifts
  * @param $uid
  */
 public function present($gifts, $uid)
 {
     $model = new Model();
     $flag = false;
     foreach ($gifts as $gift) {
         $has_gif = $model->find('select * from video_pack where uid=? and gid=?', array($uid, $gift['id']));
         if ($has_gif) {
             if (!empty($gift['exp'])) {
                 $expires = $has_gif['expires'] + $gift['exp'] * 24 * 3600;
                 $model->flush('video_pack', array('expires' => $expires), array('uid' => $uid, 'gid' => $gift['id']));
             }
             $flag = true;
         } else {
             $exp = time() + $gift['exp'] * 24 * 3600;
             $result = $model->add('video_pack', array('uid' => $uid, 'gid' => $gift['id'], 'num' => $gift['num'], 'expires' => $exp));
             if ($result !== false) {
                 $flag = true;
             } else {
                 $flag = false;
             }
         }
     }
     return $flag;
 }
Пример #5
0
 /**
  * 记录送钻石的日志
  * @param $uid int 用id
  * @param $points int 要增加的钱
  */
 protected function updateRecharge($uid, $points)
 {
     $model = new Model();
     $user = $model->find('select * from video_user where uid=' . $uid);
     $arr = array('uid' => $uid, 'created' => date('Y-m-d H:i:s'), 'points' => $points, 'order_id' => time(), 'pay_type' => 5, 'pay_id' => null, 'nickname' => $user['nickname']);
     $model = new Model();
     $model->add('video_recharge', $arr);
 }
Пример #6
0
 /**
  * 结算用的任务 领取奖励
  *
  * @param $task_id
  * @return mixed
  */
 public function billTask($task_id)
 {
     /**
      * 获取任务详情
      */
     $model = new Model();
     $task = $model->find('select * from video_task  where vtask_id=? and status=? and dml_flag !=3', array($task_id, '0'));
     if (!$task) {
         return false;
     }
     // 格式化礼物
     if (!empty($task['bonus'])) {
         $task['bonus'] = $this->formatGift($task['bonus']);
     } else {
         $task['bonus'] = '';
     }
     /**
      * 判断是否有特殊的扩展变量
      */
     $var = $model->findAll('select * from video_task_conf where vtask_id=?', array($task_id));
     if ($var) {
         foreach ($var as $value) {
             if ($value['variable'] == 'points') {
                 $value['value'] = unserialize($value['value']);
             }
             $task[$value['variable']] = $value;
         }
     }
     $check_task = new CheckUserTask();
     // 去检查每一个任务用户对应的状态
     $result = $check_task->checkTask($task, $this->uid);
     if ($result == 'success') {
         $flag = $check_task->doBillGift($task, $this->uid);
     } else {
         $flag = false;
     }
     return $flag;
 }
Пример #7
0
 /**
  * 检测邮箱任务的完成程度
  *
  * 邮箱如果验证了,就标示邮箱任务已经完成
  * 如果在任务上线系统之前验证过的,就不用了
  * 如果还没验证,就启动任务,并送礼
  * @param $task
  * @param $uid
  *
  * @return mixed
  *
  */
 public function check($task, $uid)
 {
     $this->task = $task;
     $this->uid = $uid;
     /**
      * 获取用户对应的task_user的数据
      * 如果已经验证了,但是又没有为这个用户插入这个任务的话
      * 即在 任务系统上线前 就已经认证的用户 此时要插入一条完成了任务的数据
      */
     $model = new Model();
     $userTask = $model->find('select * from video_task_user where vtask_id=' . $task['vtask_id'] . ' and uid=' . $uid);
     $user = $model->find('select * from video_user where uid=' . $uid);
     if ($user['safemail'] && !$userTask) {
         $c = serialize(array('csc' => 100, 'update_time' => time()));
         $data = array('uid' => $uid, 'vtask_id' => $task['vtask_id'], 'status' => 1, 'csc' => $c, 'apply_date' => time(), 'init_time' => date('Y-m-d H:i:s'), 'dml_flag' => 1);
         $model->add('video_task_user', $data);
         // 当完成后的加上1个完成用户
         $this->updateTaskAchievers($task);
         return 'all';
     }
     /**
      * 既没验证 又没申请任务的
      * 做自动申请操作 等待邮箱的安全验证
      * 就返回false
      *
      */
     if (!$user['safemail'] && !$userTask) {
         $c = serialize(array('csc' => 0, 'update_time' => time()));
         $data = array('uid' => $uid, 'vtask_id' => $task['vtask_id'], 'status' => 0, 'csc' => $c, 'apply_date' => time(), 'init_time' => date('Y-m-d H:i:s'), 'dml_flag' => 1);
         $model->add('video_task_user', $data);
         // 增加一个申请人数
         $this->updateTaskApplicants($task);
         return 'doing';
     }
     /**
      * 完成且领取奖励
      */
     if ($userTask['status'] == 1) {
         return 'all';
     }
     /**
      * 失败的
      */
     if ($userTask['status'] == -1) {
         return 'failed';
     }
     /**
      * 完成了,且等待领取奖励
      */
     $csc = unserialize($userTask['csc']);
     if ($csc['csc'] == 100 && $userTask['status'] == 0) {
         return 'success';
     }
     /**
      * 当进度不是满的,此时要检查下完成情况
      * 进行更新与否的判断和操作
      * 如果用户已经完成了邮箱的验证 就更新状态
      */
     if ($csc['csc'] != 100) {
         if ($user['safemail']) {
             $csc['csc'] = 100;
             $csc['update_time'] = time();
             $model->flush('video_task_user', array('csc' => serialize($csc)), array('auto_id' => $userTask['auto_id']));
             return 'success';
         }
         return 'doing';
     }
 }