/** * Member join in ongoing activity * * @param $wechatId * @param $activityTypeId * @param $activityCode * @param $memberId * @return array */ public static final function memberJoinActivity($wechatId, $activityTypeId, $activityCode, $memberId) { $result = ['status' => ErrorCode::success, 'param' => null]; //根据编号获取活动 $activity = Activity::getActivityByCode($wechatId, $activityTypeId, $activityCode); if (!$activity) { $result['status'] = ErrorCode::err_activity_not_exist; return $result; } //获取manager $manager = ActivityManager::getById($activity['activity_manager_id']); if (!$manager) { $result['status'] = ErrorCode::err_activity_manager_not_found; return $result; } //获取活动session $key = 'activity-' . $wechatId . '-' . $manager['id']; $session = Session::get($key); if (!$session) { $result['status'] = ErrorCode::err_activity_session_not_exist; return $result; } if ($session['activity_code'] != $activityCode) { $result['status'] = ErrorCode::err_activity_session_not_exist; return $result; } //检查是否重复加入活动 if (in_array($memberId, $session['member_id'])) { $result['status'] = ErrorCode::err_member_repeat_join; $result['param'] = $activity; return $result; } //检查是否已加入过另外的活动 $preId = ActivityMember::getActivityIdOngoing($wechatId, $memberId); $pre = Activity::getActivityById($preId['activity_id']); if ($pre) { $result['status'] = ErrorCode::err_pre_joined_activity_ongoing; $result['param'] = $pre; return $result; } //添加用户到活动成员表 $member = new ActivityMember(); $member->wechat_id = $wechatId; $member->activity_id = $session['activity_id']; $member->user_id = $memberId; $member->is_ongoing = 1; if (!$member->save()) { SysLog::error(__FILE__, __METHOD__, __LINE__, 'create activity member error'); $result['status'] = ErrorCode::err_create_activity_member_fail; return $result; } //更新活动session, 添加用户ID到session $session['member_count']++; $session['member_id'][] = $memberId; $session['timestamps'] = time(); if (!Session::update($key, $session, $session['duration'])) { $result['status'] = ErrorCode::err_update_activity_session_fail; return $result; } Log::info(PHP_EOL . '[===================================================Session Member Join :]' . PHP_EOL . '[activity type:] ' . $activityTypeId . PHP_EOL . '[activity code:] ' . $session['activity_code'] . PHP_EOL . '[session key:] ' . $key . PHP_EOL . '[session value:] ' . json_encode($session) . PHP_EOL); $result['status'] = ErrorCode::success; $result['param'] = $activity; return $result; }
/** * Close activity * * @param $activity * @return void */ public static function closeActivity($activity) { ActivityMember::closeActivity($activity); $activity->status = self::STATUS_CLOSED; $activity->closed_at = Carbon::now(); $activity->save(); }