Esempio n. 1
0
 public static function getActivityManager($wechatId, $activityType, $memberId)
 {
     $member = ActivityMember::where(['wechat_id' => $wechatId, 'doctor_id' => $memberId, 'is_ongoing' => 1])->get()->first();
     if (!$member) {
         $activity = self::where(['id' => $member['activity_id'], 'wechat_id' => $wechatId, 'activity_type_id' => $activityType, 'status' => self::STATUS_ONGOING])->get()->first();
         if ($activity) {
             return ActivityManager::getById($activity['activity_manager_id']);
         }
     }
     return null;
 }
Esempio n. 2
0
 /**
  * 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;
 }
Esempio n. 3
0
 private static function registerHandle($app, $user, $mobile)
 {
     $openId = $user['open_id'];
     if ($openId) {
         //新注册用户
         if (!$user['mobile']) {
             //先寻找有无此手机号的代表, 有则绑定手机号和openid
             $manager = ActivityManager::getByMobile($mobile);
             if ($manager->bindManager($app, $openId, $mobile)) {
                 return UserCache::updateUser($app, $openId);
             } else {
                 if (Doctor::createDoctor($app, $openId, $mobile)) {
                     return UserCache::updateUser($app, $openId);
                 }
             }
         } else {
             if ($user['type'] == UserOpenid::TYPE_DOCTOR) {
                 $doctor = Doctor::getById($user['id']);
                 $doctor->mobile = $mobile;
                 $doctor->updated_at = Carbon::now();
                 if ($doctor->save()) {
                     return UserCache::updateUser($app, $openId);
                 }
             }
             if ($user['type'] == UserOpenid::TYPE_MANAGER) {
                 $manager = ActivityManager::getById($user['id']);
                 $manager->mobile = $mobile;
                 $manager->updated_at = Carbon::now();
                 if ($manager->save()) {
                     return UserCache::updateUser($app, $openId);
                 }
             }
         }
     }
     return false;
 }