/** * 检查签到任务 * * @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'; } }
/** * 检查首次预约的任务 * * @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'; } }
/** * 检测用户任务对应的状态的问题 * @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); }
/** * 添加用户的礼物到背包中 * * @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; }
/** * 记录送钻石的日志 * @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); }
/** * 结算用的任务 领取奖励 * * @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; }
/** * 检测邮箱任务的完成程度 * * 邮箱如果验证了,就标示邮箱任务已经完成 * 如果在任务上线系统之前验证过的,就不用了 * 如果还没验证,就启动任务,并送礼 * @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'; } }