| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- <?php
- /**
- * 厦门云联储网络科技有限公司
- * https://www.baokuaiyun.com
- * Copyright (c) 2023 爆块云 All rights reserved.
- */
- namespace app\models;
- use app\librarys\shareTree\models\AbstractTreePath;
- use app\models\userTreeQuery\UserTreePathQuery;
- /**
- * @property int $parent_id
- * @property int $child_id
- * @property int $nearest_parent_id
- * @property int $parent_level
- * @property int $child_level
- * @property string $created_at
- */
- class UserTreePath extends AbstractTreePath
- {
- public static $team_num;
- public static $team_count;
- /**
- * @inheritDoc
- */
- public static function tableName(): string
- {
- return '{{%user_tree_path}}';
- }
- /**
- * @inheritdoc
- * @return UserTreePathQuery the active query used by this AR class.
- */
- public static function find(): UserTreePathQuery
- {
- return new UserTreePathQuery(get_called_class());
- }
- /**
- * 格式化数据
- * @param $array
- * @return array
- */
- public static function formatChildren(array $array, $user_id) {
- if (empty($array)) {
- return $array;
- }
- // TODO: 可以添加其他逻辑
- $format_data = [];
- foreach ($array as $v) {
- $saas_user = SaasUser::findOne(['mobile' => $v['binding']]);
- $order = Order::find()->where(['store_id' => $v['store_id'], 'is_pay' => 1, 'trade_status' => Order::ORDER_FLOW_CONFIRM, 'is_delete' => 0, 'user_id' => $v['id']]);
- $parent_user = User::findOne($v['parent_id']);
- $parent_saas_user = SaasUser::findOne(['mobile' => $parent_user->binding]);
- $level_name = '普通用户';
- $share_holder = ShareHolder::findOne(['store_id' => $v['store_id'], 'user_id' => $v['id'], 'status' => 1, 'is_delete' => 0]);
- if ($share_holder) {
- $level_name = ShareHolderLevel::findOne($share_holder->level_id)->name;
- }
- $format_data[] = [
- 'id' => $v['id'],
- 'parent_id' => $v['parent_id'],
- 'avatar' => $saas_user ? $saas_user->avatar : $v['avatar_url'],
- 'name' => $saas_user ? $saas_user->name : $v['nickname'],
- 'order_count' => count($order->asArray()->all()),
- 'order_price' => $order->sum('pay_price') ?: 0,
- 'recommend_man' => $parent_saas_user ? $parent_saas_user->name : $parent_user->nickname,
- 'level_name' => $level_name
- ];
- }
- self::$team_num = Option::get('team_num', get_store_id(), 'bonus_pool', 0)['value'];
- $new_data = self::getChildrenTree($format_data, $user_id);
- return $new_data;
- }
- public static function getChildrenTree(array $data, $pid = 0, $num = 0) {
- $tree = [];
- if ($num + 1 >= self::$team_num) {
- return $tree;
- }
- if ($num < self::$team_num) {
- foreach ($data as $value) {
- if ($value['parent_id'] == $pid) {
- self::$team_count += 1;
- $value['children'] = self::getChildrenTree($data, $value['id'], ++$num);
- $tree[] = $value;
- }
- }
- }
-
- return $tree;
- }
- }
|