$this->user_id, 'is_delete' => 0]); $parent = User::findOne(['id' => $this->parent_id, 'is_delete' => 0]); if (!$user || !$parent) { \Yii::error('saasuser用户未找到1'); return [ 'code' => 1, 'msg' => '用户未找到', ]; } if (empty($user->binding) || empty($parent->binding)) { // 手机号不存在,直接返回,一般不会出现此情况 \Yii::error('saasuser用户未找到2'); return [ 'code' => 1, 'msg' => '用户未找到', ]; } if ($user->binding == $parent->binding) { \Yii::error('saasuser不能绑定自己为上级'); return [ 'code' => 1, 'msg' => '不能绑定自己为上级', ]; } // 查找对应的平台id $saasUser = SaasUser::find() ->where(['mobile' => $user->binding, 'is_delete' => SaasUser::DELETE_STATUS_FALSE]) ->one(); $parentSaasUser = SaasUser::find() ->where(['mobile' => $parent->binding, 'is_delete' => SaasUser::DELETE_STATUS_FALSE]) ->one(); if (!$saasUser || !$parentSaasUser) { \Yii::error('saasuser用户未找到3'); return [ 'code' => 1, 'msg' => '用户未找到', ]; } if ($saasUser->parent_id > 0) { // 已经绑定过父级 \Yii::error('saasuser用户存在父级'); return [ 'code' => 1, 'msg' => '用户存在父级', ]; } // 如果父级id比当前用户小,说明该用户早就注册,也不绑定 // if ($parentSaasUser->id < $saasUser->id) { // \Yii::error('saasuser父级id比用户id大'); // return [ // 'code' => 1, // 'msg' => '父级id比用户id大', // ]; // } //判断父级id是否在三级分销链中 // \Yii::error($saasUser->id . ' => ' . $parentSaasUser->id); $res = self::saasCheck($saasUser->id, $parentSaasUser->id, 0); if ($res['code'] == 1) { \Yii::error('saasuser父级id是否在三级分销链中'); return [ 'code' => 1, 'msg' => '父级id是否在三级分销链中' ]; } $saasUser->parent_id = $parentSaasUser->id; if ($saasUser->save()) { \Yii::error('saasuser绑定成功'); return [ 'code' => 0, 'msg' => '绑定成功' ]; } else { \Yii::error('saasuser绑定失败'); return [ 'code' => 0, 'msg' => '绑定失败' ]; } } // 绑定商城之间上下级 public function storeSave() { $user = User::findOne(['id' => $this->user_id, 'is_delete' => 0]); $parent = User::findOne(['id' => $this->parent_id, 'is_delete' => 0]); if (!$user || !$parent) { \Yii::error('saasStore用户未找到1'); return [ 'code' => 1, 'msg' => '用户未找到', ]; } if (empty($user->binding) || empty($parent->binding)) { // 手机号不存在,直接返回,一般不会出现此情况 \Yii::error('saasStore用户未找到2'); return [ 'code' => 1, 'msg' => '用户未找到', ]; } // 查找对应的平台id $saasUser = SaasUser::find() ->where(['mobile' => $user->binding, 'is_delete' => SaasUser::DELETE_STATUS_FALSE]) ->one(); $parentSaasUser = SaasUser::find() ->where(['mobile' => $parent->binding, 'is_delete' => SaasUser::DELETE_STATUS_FALSE]) ->one(); if (!$saasUser || !$parentSaasUser) { \Yii::error('saasStore用户未找到3'); return [ 'code' => 1, 'msg' => '用户未找到', ]; } // 如果两个store_id相同,就跳过 if ($saasUser->store_id == $parentSaasUser->store_id) { \Yii::error('saasStore不能绑定自己为上级商城'); return [ 'code' => 1, 'msg' => '不能绑定自己为上级商城', ]; } $store = Store::findOne(['id' => $saasUser->store_id, 'is_delete' => 0]); $parentStore = Store::findOne(['id' => $parentSaasUser->store_id, 'is_delete' => 0]); if (!$store || !$parentStore) { \Yii::error('saasStore商城不存在'); return [ 'code' => 1, 'msg' => '商城不存在', ]; } if ($store->parent_id > 0) { \Yii::error('saasStore商城已经存在父级'); return [ 'code' => 1, 'msg' => '商城已经存在父级', ]; } $res = self::storeCheck($store->id, $parentStore->id, 0); if ($res['code'] == 1) { \Yii::error('saasstore父级id是否在三级分销链中'); return [ 'code' => 1, 'msg' => '父级id是否在三级分销链中' ]; } $store->parent_id = $parentStore->id; if ($store->save()) { \Yii::error('saasStore绑定成功'); return [ 'code' => 0, 'msg' => '绑定成功' ]; } else { \Yii::error('saasStore绑定失败'); return [ 'code' => 0, 'msg' => '绑定失败' ]; } } // 绑定分享人上下级 public function shareSave() { $user = User::findOne(['id' => $this->user_id, 'is_delete' => 0]); $parent = User::findOne(['id' => $this->parent_id, 'is_delete' => 0]); if (!$user || !$parent) { return [ 'code' => 1, 'msg' => '用户未找到', ]; } $model = new UserShareLog(); $model->user_id = $this->user_id; $model->parent_id = $this->parent_id; $model->created_at = time(); if($model->save()) { return [ 'code' => 0, 'msg' => '绑定成功' ]; } return [ 'code' => 0, 'msg' => '绑定失败' ]; } //临时绑定 public function temporarySave(){ $user = User::findOne(['id' => $this->user_id, 'is_delete' => 0]); $parent = User::findOne(['id' => $this->parent_id, 'is_delete' => 0]); if (!$user || !$parent) { return [ 'code' => 1, 'msg' => '用户未找到', ]; } $model = new UserBindLog(); $model->user_id = $this->user_id; $model->parent_id = $this->parent_id; $model->bind_time = time(); if($model->save()) { return [ 'code' => 0, 'msg' => '绑定成功' ]; } return [ 'code' => 0, 'msg' => '绑定失败' ]; } /** * @return array * 绑定上下级关系 */ public function save() { $this->storeSave(); // 绑定商城之间上下级 $this->saasSave(); // 绑定平台用户上下级 $this->shareSave(); // 获取分享绑定的上下级 $this->temporarySave();//临时绑定上下级 $store_id = $this->store_id ? $this->store_id : get_store_id(); $setting = Option::get('share_basic_setting', $store_id); $setting = $setting ? Json::decode($setting['value']) : []; //店铺未开启分销 if ($setting['level']['value'] == 0) { \Yii::warning('未开启分销'); return [ 'code' => 1, 'msg' => '未开启分销' ]; } // 成为下线条件 0--首次点击分享链接 1--首次下单 2--首次付款 if ($setting['condition']['value'] !== $this->condition) { $user = User::findOne(['id' => $this->user_id, 'is_delete' => 0]); if ($user && !$user->parent_id > 0 && !$user->parent_user_id > 0) { $user->parent_user_id = $this->parent_id; $user->save(); } \Yii::warning('未满足成为下线条件'); return [ 'code' => 1, 'msg' => '未满足成为下线条件' ]; } //自身分享的页面 if ($this->user_id == $this->parent_id) { \Yii::warning('自身分销的页面'); return [ 'code' => 1, 'msg' => '自身分销的页面' ]; } //父级id是否是分销商 $exit = Share::find()->andWhere(['user_id' => $this->parent_id, 'store_id' => $this->store_id, 'is_delete' => 0, 'status' => 1])->exists(); if (!$exit) { \Yii::warning('不是分销商'); return [ 'code' => 1, 'msg' => '不是分销商' ]; } //判断父级id是否在三级分销链中 $res = self::check($this->user_id, $this->parent_id, 0); if ($res['code'] == 1) { \Yii::warning('父级id不存在三级分销链中'); return [ 'code' => 1, 'msg' => '父级id是否在三级分销链中' ]; } $user = User::findOne(['id' => $this->user_id, 'is_delete' => 0]); $parent = User::findOne(['id' => $this->parent_id, 'is_delete' => 0]); if ($parent->is_distributor != 1) { \Yii::warning('父级不是分销商'); return [ 'code' => 1, 'msg' => '父级不是分销商' ]; } //用户是否是分销商 if ($user->is_distributor == 1) { \Yii::warning('用户是分销商'); return [ 'code' => 1, 'msg' => '用户是分销商' ]; } //用户是否存在父级 if ($user->parent_id != 0) { \Yii::warning('用户存在父级'); return [ 'code' => 1, 'msg' => '用户存在父级' ]; } $user->parent_id = $this->parent_id; if ($user->save()) { // 推荐送积分 if ($setting['d_rec_member_integral']['value'] > 0) { //$user = User::findOne($user->id); // $user->integral += $setting['d_rec_member_integral']['value']; // $user->save(); AccountLog::saveLog($user->id,$setting['d_rec_member_integral']['value'],1,1,0, 0,'被推荐会员赠送积分'); } if ($setting['rec_member_integral']['value'] > 0) { $parent_info = User::findOne($this->parent_id); if ($parent_info) { AccountLog::saveLog($parent_info->id, $setting['rec_member_integral']['value'],1,1, 0,0,'推荐会员赠送积分'); } // $parent_info->integral += $setting['rec_member_integral']['value']; // $parent_info->save(); // $register_print = new Register(); // $register_print->save(); } return [ 'code' => 0, 'msg' => '成功', 'data' => $parent->nickname ]; } else { return [ 'code' => 1, 'msg' => '网络异常' ]; } } public static function check($user_id, $parent_id, $root = 0) { if ($root == 3) { return [ 'code' => 0, 'msg' => '可以绑定' ]; } if ($parent_id == 0) { return [ 'code' => 0, 'msg' => '可以绑定' ]; } $user = User::findOne(['id' => $parent_id, 'is_delete' => 0]); if (!$user) { return [ 'code' => 1, 'msg' => '不能' ]; } if ($user_id == $user->parent_id) { return [ 'code' => 1, 'msg' => '不能' ]; } return self::check($user_id, $user->parent_id, $root + 1); } public static function saasCheck($user_id, $parent_id, $root = 0) { if ($root == 3) { return [ 'code' => 0, 'msg' => '可以绑定' ]; } if ($parent_id == 0) { return [ 'code' => 0, 'msg' => '可以绑定' ]; } $user = SaasUser::findOne(['id' => $parent_id, 'is_delete' => 0]); if ($user_id == $user->parent_id) { return [ 'code' => 1, 'msg' => '不能' ]; } return self::saasCheck($user_id, $user->parent_id, $root + 1); } public static function storeCheck($store_id, $parent_id, $root = 0) { if ($root == 3) { return [ 'code' => 0, 'msg' => '可以绑定' ]; } if ($parent_id == 0) { return [ 'code' => 0, 'msg' => '可以绑定' ]; } $store = Store::findOne(['id' => $parent_id, 'is_delete' => 0]); if ($store_id == $store->parent_id) { return [ 'code' => 1, 'msg' => '不能' ]; } return self::saasCheck($store_id, $store->parent_id, $root + 1); } }