| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- <?php
- namespace addons\CloudStock\common\logic\level_up;
- use addons\CloudStock\common\enums\CloudStockEnum;
- use addons\CloudStock\common\models\CloudStockAgent;
- use addons\CloudStock\common\models\CloudStockBonusPoolLevel;
- use addons\CloudStock\common\models\CloudStockBonusPoolUser;
- use addons\CloudStock\common\models\CloudStockIncreaseDetail;
- use common\enums\AddonsEnum;
- use common\enums\StatusEnum;
- use common\models\user\UserPartitionRelationship;
- class PoolUser
- {
- public static function handle($mall_id, $user_id, $upgrade_status = 1)
- {
- self::check($mall_id, $user_id, $upgrade_status);
- $parent_id_arr = UserPartitionRelationship::getParentIdArr($user_id);
- $parent_id_arr = array_reverse($parent_id_arr);
- foreach ($parent_id_arr as $id){
- self::check($mall_id, $id, $upgrade_status);
- }
- }
- public static function check($mall_id, $user_id, $upgrade_status = 1)
- {
- $cloud_stock_agent = CloudStockAgent::findOne(['mall_id' => $mall_id, 'user_id' => $user_id, 'status' => [StatusEnum::ENABLED]]);
- if (empty($cloud_stock_agent)) return;
- $pool_user = CloudStockBonusPoolUser::findOne(['mall_id' => $mall_id, 'user_id' => $user_id, 'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]);
- $where = [
- ['mall_id' => $mall_id],
- ['status' => StatusEnum::ENABLED],
- ['upgrade_type_condition' => 1],
- ];
- if (!empty($pool_user)) {
- if (empty($pool_user['status'])) return;
- $where[] = ['>', 'level', $pool_user['level']];
- }
- $pool_level_list = CloudStockBonusPoolLevel::lists([
- 'where' => $where,
- 'order' => 'level desc'
- ]);
- if (empty($pool_level_list)) return;
- foreach ($pool_level_list as $level_model) {
- $cloud_stock_level_arr = json_decode($level_model['cloud_stock_level'],true);
- if(empty($cloud_stock_level_arr)) continue;
- if(!in_array($cloud_stock_agent['level'],$cloud_stock_level_arr)) continue;
- $is_return = false;
- $condition_type = $level_model['condition_type'];
- $checked_condition_keys = json_decode($level_model['checked_condition_keys'], true);
- $checked_condition_values = json_decode($level_model['checked_condition_values'], true);
- $checked_condition_values = array_column($checked_condition_values, 'value', 'key');
- foreach ($checked_condition_keys as $k => $v) {
- if ($v) {
- $function = 'condition' . $k;
- if (isset($checked_condition_values[$k])) {
- $param = $checked_condition_values[$k];
- $param['mall_id'] = $mall_id;
- $param['user_id'] = $user_id;
- $is_bool = self::$function($param);
- if ($condition_type == 1) {
- //满足其一条件可升级
- if ($is_bool) {
- $is_return = true;
- break;
- } else {
- $is_return = false;
- }
- } elseif ($condition_type == 2) {
- if ($is_bool) {
- $is_return = true;
- } else {
- $is_return = false;
- break;
- }
- }
- }
- }
- }
- if ($is_return) {
- CloudStockBonusPoolUser::create([
- 'mall_id' => $mall_id,
- 'user_id' => $user_id,
- 'level' => $level_model['level'],
- 'upgrade_status' => $upgrade_status,
- 'upgrade_level_at' => time(),
- ]);
- }
- }
- }
- //直推多少指定等级云仓代理,且每位直推代理的团队产生n位指定等级的云仓代理
- public static function condition0($params)
- {
- if (!isset($params['direct_people']) || !isset($params['direct_level'])) return false;
- $people = $params['direct_people'];
- $direct_team_people = $params['direct_team_people']??0;
- $level = $params['direct_level'];
- $direct_team_level = $params['direct_team_level']??0;
- $user_id = $params['user_id'];
- $mall_id = $params['mall_id'];
- $user_id1_arr = UserPartitionRelationship::getChildIdArr($user_id, 1);//直推下级id
- $count = count($user_id1_arr);//好友人数
- if ($count < $people) return false;
- $query = CloudStockAgent::find()->where([
- 'mall_id' => $mall_id, 'user_id' => $user_id1_arr,
- 'level' => $level,
- 'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]);
- $temp_query = clone $query;
- $nums = $query->count();
- if ($nums < $people) return false;
- $list = $temp_query->all();
- $is_true = true;
- if(empty($direct_team_level)||empty($direct_team_people)) return $is_true;
- foreach ($list as $agent){
- $team_id_arr = UserPartitionRelationship::getChildIdArr($agent['user_id'], 0);//直推代理的团队
- $numbers = CloudStockAgent::find()->where([
- 'mall_id' => $mall_id, 'user_id' => $team_id_arr,
- 'level' => $direct_team_level,
- 'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]])->count();
- if($numbers<$direct_team_people) {
- $is_true = false;
- break;
- }
- }
- return $is_true;
- }
- //团队产生多少指定等级云仓代理
- public static function condition1($params)
- {
- if (!isset($params['team_people']) || !isset($params['team_level'])) return false;
- $people = $params['team_people'];
- $level = $params['team_level'];
- $user_id = $params['user_id'];
- $mall_id = $params['mall_id'];
- $user_id_arr = UserPartitionRelationship::getChildIdArr($user_id, 0);//团队下级id
- $count = count($user_id_arr);//团队人数
- if ($count < $people) return false;
- $nums = CloudStockAgent::find()->where([
- 'mall_id' => $mall_id, 'user_id' => $user_id_arr,
- 'level' => $level,
- 'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]])
- ->count();
- if ($nums < $people) return false;
- return true;
- }
- //个人补货多少
- public static function condition2($params)
- {
- if (!isset($params['self_fill_num'])) return false;
- $self_fill_num = $params['self_fill_num'];
- $user_id = $params['user_id'];
- $mall_id = $params['mall_id'];
- $configs = \Yii::$app->services->setting->addons->get($mall_id, AddonsEnum::ADDONS_NAME_CLOUD_STOCK, 'basic');
- $changes_type = [CloudStockEnum::STOCK_CHANGE_TYPE100];
- if(!empty($configs['is_upgrade_bag_give_goods_pool'])) $changes_type[]= CloudStockEnum::STOCK_CHANGE_TYPE105;
- $num = CloudStockIncreaseDetail::find()
- ->where([
- 'mall_id' => $mall_id,
- 'user_id' => $user_id,
- 'changes_type' => $changes_type
- ])->sum('num');
- if ($num < $self_fill_num) return false;
- return true;
- }
- //团队补货多少
- public static function condition3($params)
- {
- if (!isset($params['team_fill_num'])) return false;
- $team_fill_num = $params['team_fill_num'];
- $user_id = $params['user_id'];
- $mall_id = $params['mall_id'];
- $user_id_arr = UserPartitionRelationship::getChildIdArr($user_id, 0);//团队下级id
- $configs = \Yii::$app->services->setting->addons->get($mall_id, AddonsEnum::ADDONS_NAME_CLOUD_STOCK, 'basic');
- $changes_type = [CloudStockEnum::STOCK_CHANGE_TYPE100];
- if(!empty($configs['is_upgrade_bag_give_goods_pool'])) $changes_type[]= CloudStockEnum::STOCK_CHANGE_TYPE105;
- $num = CloudStockIncreaseDetail::find()
- ->where([
- 'mall_id' => $mall_id,
- 'user_id' => $user_id_arr,
- 'changes_type' => $changes_type
- ])->sum('num');
- if ($num < $team_fill_num) return false;
- return true;
- }
- //直推N个分红池指定等级(低等级或平级),可升级
- public static function condition4($params)
- {
- if (!isset($params['direct_people']) || !isset($params['direct_level'])) return false;
- $people = $params['direct_people'];
- $level = $params['direct_level'];
- $user_id = $params['user_id'];
- $mall_id = $params['mall_id'];
- $user_id1_arr = UserPartitionRelationship::getChildIdArr($user_id, 1);//直推下级id
- $count = count($user_id1_arr);//好友人数
- if ($count < $people) return false;
- $nums = CloudStockBonusPoolUser::find()->where([
- 'mall_id' => $mall_id, 'user_id' => $user_id1_arr,
- 'level' => $level,
- 'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]])
- ->count();
- if ($nums < $people) return false;
- return true;
- }
- }
|