PoolUser.php 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. <?php
  2. namespace addons\CloudStock\common\logic\level_up;
  3. use addons\CloudStock\common\enums\CloudStockEnum;
  4. use addons\CloudStock\common\models\CloudStockAgent;
  5. use addons\CloudStock\common\models\CloudStockBonusPoolLevel;
  6. use addons\CloudStock\common\models\CloudStockBonusPoolUser;
  7. use addons\CloudStock\common\models\CloudStockIncreaseDetail;
  8. use common\enums\AddonsEnum;
  9. use common\enums\StatusEnum;
  10. use common\models\user\UserPartitionRelationship;
  11. class PoolUser
  12. {
  13. public static function handle($mall_id, $user_id, $upgrade_status = 1)
  14. {
  15. self::check($mall_id, $user_id, $upgrade_status);
  16. $parent_id_arr = UserPartitionRelationship::getParentIdArr($user_id);
  17. $parent_id_arr = array_reverse($parent_id_arr);
  18. foreach ($parent_id_arr as $id){
  19. self::check($mall_id, $id, $upgrade_status);
  20. }
  21. }
  22. public static function check($mall_id, $user_id, $upgrade_status = 1)
  23. {
  24. $cloud_stock_agent = CloudStockAgent::findOne(['mall_id' => $mall_id, 'user_id' => $user_id, 'status' => [StatusEnum::ENABLED]]);
  25. if (empty($cloud_stock_agent)) return;
  26. $pool_user = CloudStockBonusPoolUser::findOne(['mall_id' => $mall_id, 'user_id' => $user_id, 'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]);
  27. $where = [
  28. ['mall_id' => $mall_id],
  29. ['status' => StatusEnum::ENABLED],
  30. ['upgrade_type_condition' => 1],
  31. ];
  32. if (!empty($pool_user)) {
  33. if (empty($pool_user['status'])) return;
  34. $where[] = ['>', 'level', $pool_user['level']];
  35. }
  36. $pool_level_list = CloudStockBonusPoolLevel::lists([
  37. 'where' => $where,
  38. 'order' => 'level desc'
  39. ]);
  40. if (empty($pool_level_list)) return;
  41. foreach ($pool_level_list as $level_model) {
  42. $cloud_stock_level_arr = json_decode($level_model['cloud_stock_level'],true);
  43. if(empty($cloud_stock_level_arr)) continue;
  44. if(!in_array($cloud_stock_agent['level'],$cloud_stock_level_arr)) continue;
  45. $is_return = false;
  46. $condition_type = $level_model['condition_type'];
  47. $checked_condition_keys = json_decode($level_model['checked_condition_keys'], true);
  48. $checked_condition_values = json_decode($level_model['checked_condition_values'], true);
  49. $checked_condition_values = array_column($checked_condition_values, 'value', 'key');
  50. foreach ($checked_condition_keys as $k => $v) {
  51. if ($v) {
  52. $function = 'condition' . $k;
  53. if (isset($checked_condition_values[$k])) {
  54. $param = $checked_condition_values[$k];
  55. $param['mall_id'] = $mall_id;
  56. $param['user_id'] = $user_id;
  57. $is_bool = self::$function($param);
  58. if ($condition_type == 1) {
  59. //满足其一条件可升级
  60. if ($is_bool) {
  61. $is_return = true;
  62. break;
  63. } else {
  64. $is_return = false;
  65. }
  66. } elseif ($condition_type == 2) {
  67. if ($is_bool) {
  68. $is_return = true;
  69. } else {
  70. $is_return = false;
  71. break;
  72. }
  73. }
  74. }
  75. }
  76. }
  77. if ($is_return) {
  78. CloudStockBonusPoolUser::create([
  79. 'mall_id' => $mall_id,
  80. 'user_id' => $user_id,
  81. 'level' => $level_model['level'],
  82. 'upgrade_status' => $upgrade_status,
  83. 'upgrade_level_at' => time(),
  84. ]);
  85. }
  86. }
  87. }
  88. //直推多少指定等级云仓代理,且每位直推代理的团队产生n位指定等级的云仓代理
  89. public static function condition0($params)
  90. {
  91. if (!isset($params['direct_people']) || !isset($params['direct_level'])) return false;
  92. $people = $params['direct_people'];
  93. $direct_team_people = $params['direct_team_people']??0;
  94. $level = $params['direct_level'];
  95. $direct_team_level = $params['direct_team_level']??0;
  96. $user_id = $params['user_id'];
  97. $mall_id = $params['mall_id'];
  98. $user_id1_arr = UserPartitionRelationship::getChildIdArr($user_id, 1);//直推下级id
  99. $count = count($user_id1_arr);//好友人数
  100. if ($count < $people) return false;
  101. $query = CloudStockAgent::find()->where([
  102. 'mall_id' => $mall_id, 'user_id' => $user_id1_arr,
  103. 'level' => $level,
  104. 'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]);
  105. $temp_query = clone $query;
  106. $nums = $query->count();
  107. if ($nums < $people) return false;
  108. $list = $temp_query->all();
  109. $is_true = true;
  110. if(empty($direct_team_level)||empty($direct_team_people)) return $is_true;
  111. foreach ($list as $agent){
  112. $team_id_arr = UserPartitionRelationship::getChildIdArr($agent['user_id'], 0);//直推代理的团队
  113. $numbers = CloudStockAgent::find()->where([
  114. 'mall_id' => $mall_id, 'user_id' => $team_id_arr,
  115. 'level' => $direct_team_level,
  116. 'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]])->count();
  117. if($numbers<$direct_team_people) {
  118. $is_true = false;
  119. break;
  120. }
  121. }
  122. return $is_true;
  123. }
  124. //团队产生多少指定等级云仓代理
  125. public static function condition1($params)
  126. {
  127. if (!isset($params['team_people']) || !isset($params['team_level'])) return false;
  128. $people = $params['team_people'];
  129. $level = $params['team_level'];
  130. $user_id = $params['user_id'];
  131. $mall_id = $params['mall_id'];
  132. $user_id_arr = UserPartitionRelationship::getChildIdArr($user_id, 0);//团队下级id
  133. $count = count($user_id_arr);//团队人数
  134. if ($count < $people) return false;
  135. $nums = CloudStockAgent::find()->where([
  136. 'mall_id' => $mall_id, 'user_id' => $user_id_arr,
  137. 'level' => $level,
  138. 'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]])
  139. ->count();
  140. if ($nums < $people) return false;
  141. return true;
  142. }
  143. //个人补货多少
  144. public static function condition2($params)
  145. {
  146. if (!isset($params['self_fill_num'])) return false;
  147. $self_fill_num = $params['self_fill_num'];
  148. $user_id = $params['user_id'];
  149. $mall_id = $params['mall_id'];
  150. $configs = \Yii::$app->services->setting->addons->get($mall_id, AddonsEnum::ADDONS_NAME_CLOUD_STOCK, 'basic');
  151. $changes_type = [CloudStockEnum::STOCK_CHANGE_TYPE100];
  152. if(!empty($configs['is_upgrade_bag_give_goods_pool'])) $changes_type[]= CloudStockEnum::STOCK_CHANGE_TYPE105;
  153. $num = CloudStockIncreaseDetail::find()
  154. ->where([
  155. 'mall_id' => $mall_id,
  156. 'user_id' => $user_id,
  157. 'changes_type' => $changes_type
  158. ])->sum('num');
  159. if ($num < $self_fill_num) return false;
  160. return true;
  161. }
  162. //团队补货多少
  163. public static function condition3($params)
  164. {
  165. if (!isset($params['team_fill_num'])) return false;
  166. $team_fill_num = $params['team_fill_num'];
  167. $user_id = $params['user_id'];
  168. $mall_id = $params['mall_id'];
  169. $user_id_arr = UserPartitionRelationship::getChildIdArr($user_id, 0);//团队下级id
  170. $configs = \Yii::$app->services->setting->addons->get($mall_id, AddonsEnum::ADDONS_NAME_CLOUD_STOCK, 'basic');
  171. $changes_type = [CloudStockEnum::STOCK_CHANGE_TYPE100];
  172. if(!empty($configs['is_upgrade_bag_give_goods_pool'])) $changes_type[]= CloudStockEnum::STOCK_CHANGE_TYPE105;
  173. $num = CloudStockIncreaseDetail::find()
  174. ->where([
  175. 'mall_id' => $mall_id,
  176. 'user_id' => $user_id_arr,
  177. 'changes_type' => $changes_type
  178. ])->sum('num');
  179. if ($num < $team_fill_num) return false;
  180. return true;
  181. }
  182. //直推N个分红池指定等级(低等级或平级),可升级
  183. public static function condition4($params)
  184. {
  185. if (!isset($params['direct_people']) || !isset($params['direct_level'])) return false;
  186. $people = $params['direct_people'];
  187. $level = $params['direct_level'];
  188. $user_id = $params['user_id'];
  189. $mall_id = $params['mall_id'];
  190. $user_id1_arr = UserPartitionRelationship::getChildIdArr($user_id, 1);//直推下级id
  191. $count = count($user_id1_arr);//好友人数
  192. if ($count < $people) return false;
  193. $nums = CloudStockBonusPoolUser::find()->where([
  194. 'mall_id' => $mall_id, 'user_id' => $user_id1_arr,
  195. 'level' => $level,
  196. 'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]])
  197. ->count();
  198. if ($nums < $people) return false;
  199. return true;
  200. }
  201. }