| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520 |
- <?php
- /**
- * 重庆赤晓店信息科技有限公司
- * https://www.chixiaodian.com
- * Copyright (c) 2023 赤店商城 All rights reserved.
- */
- namespace app\modules\client\models\v1;
- use app\models\AccountLog;
- use app\models\Option;
- // use app\models\Register;
- use app\models\Share;
- use app\models\User;
- use app\models\UserBindLog;
- use app\models\UserGrowthValueLog;
- use app\models\UserShareLog;
- use yii\base\Model;
- use yii\helpers\Json;
- use app\models\SaasUser;
- use app\models\Store;
- use app\models\ShareHolder;
- use app\models\ShareHolderParentOutLog;
- use app\utils\Notice\NoticeSend;
- class BindForm extends Model
- {
- public $store_id;
- public $user_id;
- public $parent_id;
- public $condition;
- public $page_type;
- public $old_parent_id;
- public $isLogin;
- public $isNew = 0; // 是否新注册
- public function rules()
- {
- return [
- [['parent_id', 'user_id', 'store_id', 'condition', 'old_parent_id', 'isLogin', 'isNew'], 'integer'],
- [['page_type'], 'safe'],
- ];
- }
- /**
- * 平台Saas用户绑定上下级关系
- */
- public function saasSave()
- {
- $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('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是否在三级分销链中'
- ];
- }
- if ($parentSaasUser->parent_id == $saasUser->id) {
- return [
- 'code' => 1,
- 'msg' => '绑定失败, 不能绑定自己的下级',
- ];
- }
- $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()
- {
- try {
- $this->storeSave(); // 绑定商城之间上下级
- $this->saasSave(); // 绑定平台用户上下级
- $this->shareSave(); // 获取分享绑定的上下级
- $this->temporarySave();//临时绑定上下级
- } catch (\Exception $e) {
- // Todo
- }
-
- $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 (!empty($setting) && $setting['level']['value'] == 0) {
- // \Yii::warning('未开启分销');
- // return [
- // 'code' => 1,
- // 'msg' => '未开启分销'
- // ];
- // }
- // 成为下线条件 0--首次点击分享链接 1--首次下单 2--首次付款
- //找出不满足当前行为成为下级的条件但是 可能会成为上级的用户
- if (!$this->isLogin && !empty($setting) && $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 = $this->parent_id;
- $user->save();
- }
- \Yii::warning('未满足成为下线条件');
- return [
- 'code' => 0,
- 'msg' => '未满足成为下线条件'
- ];
- }
- // 条件为首次点击,并且是新用户的情况下才可以绑定
- if ($setting['condition']['value'] == 0 && $this->isNew == 0) {
- return [
- 'code' => 0,
- 'msg' => '不是新用户'
- ];
- }
- //自身分享的页面
- if ($this->user_id == $this->parent_id) {
- \Yii::warning('自身分销的页面');
- return [
- 'code' => 0,
- 'msg' => '自身分销的页面'
- ];
- }
- //父级id是否是分销商
- $exit = Share::find()->andWhere(['user_id' => $this->parent_id, 'store_id' => $this->store_id, 'is_delete' => 0,
- 'status' => 1])->exists();
-
- $share_exit = ShareHolder::find()->andWhere(['user_id' => $this->parent_id, 'store_id' => $this->store_id, 'is_delete' => 0])->exists();
- if (!$exit && !$share_exit) {
- \Yii::warning('不是分销商');
- return [
- 'code' => 0,
- 'msg' => '不是分销商'
- ];
- }
- //判断父级id是否在三级分销链中
- $res = self::check($this->user_id, $this->parent_id, 0);
- if ($res['code'] == 1) {
- \Yii::warning('父级id不存在三级分销链中');
- return [
- 'code' => 0,
- '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' => 0,
- // 'msg' => '用户是分销商'
- // ];
- // }
- //用户是否存在父级
- if ($user->parent_id != 0 || $user->old_parent_id != 0) {
- //当不存在父级时可以继续绑定
- if($parent){
- \Yii::warning('用户存在父级');
- return [
- 'code' => 0,
- 'msg' => '用户存在父级'
- ];
- }
- }
- $parentChange = 0;
- $beforeParentId = $user->parent_id;
- if($user->parent_id != $this->parent_id){
- $parentChange = 1;
- }
- $oldParentChange = 0;
- $beforeOldParentId = $user->old_parent_id;
- if($user->old_parent_id != $this->parent_id){
- $oldParentChange = 1;
- }
- $user->parent_id = $this->parent_id;
- $user->old_parent_id = $this->parent_id;
- if ($user->save()) {
- if($user->old_parent_id > 0) {
- NoticeSend::registerTellParent($parent->binding, $user->nickname);
- }
- $desc = ShareHolderParentOutLog::getConditionName($this->condition) . ShareHolderParentOutLog::getPageTypeName($this->page_type);
- $oldParentChange && \app\utils\Share\BonusPool::addShareHolderParentOutLog($user, $beforeOldParentId, $desc, 1);
- $parentChange && \app\utils\Share\BonusPool::addShareHolderParentOutLog($user, $beforeParentId, $desc);
- // 推荐送积分
- if ($setting['d_rec_member_integral']['value'] > 0) {
- //$user = User::findOne($user->id);
- //TODO 重复增加了积分数据
- // $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);
- //TODO 重复增加了积分数据
- // $parent_info->integral += $setting['rec_member_integral']['value'];
- $parent_info->save();
- // $register_print = new Register();
- AccountLog::saveLog($parent_info->id, $setting['rec_member_integral']['value'],1,1,
- 0,0,'推荐会员赠送积分');
- // $register_print->save();
- }
- // 是推荐的新用户注册的
- $optionSetting = Option::get('growth_setting',$this->store_id,'level','')['value'];
- $optionSetting = json_decode($optionSetting, true);
- if($this->isNew == 1 && ($optionSetting && $optionSetting['share_give'] > 0)){
- $amount = $optionSetting['share_give'];
- UserGrowthValueLog::setLog($this->store_id,$this->parent_id,UserGrowthValueLog::LOG_TYPE_ADD,$amount,UserGrowthValueLog::TYPE_SHARE,"推荐注册{$amount}成长值");
- }
- 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);
- }
- }
|