store_id; $start_time = $this->start_time; $end_time = $this->end_time; $is_send = $this->is_send; $query = TeamGradesPool::find()->where(['store_id' => $store_id]); if ($start_time) { $start_time = strtotime($start_time); $query->andWhere(['>=', 'start_time', $start_time]); } if ($end_time) { $end_time = strtotime($end_time); $query->andWhere(['<=', 'end_time', $end_time]); } if ($is_send !== null && in_array($is_send, [TeamGradesPoolDetail::SEND_STATUS_NO, TeamGradesPoolDetail::SEND_STATUS_YES])) { $query->andWhere(['is_send' => $is_send]); } $query->orderBy(['id' => SORT_DESC])->select('id, start_time, end_time, is_send, bonus_type'); $pagination = pagination_make($query); foreach ($pagination['list'] as &$list) { $list['start_time'] = date('Y-m-d H:i:s', $list['start_time']); $list['end_time'] = date('Y-m-d H:i:s', $list['end_time']); $list['is_send'] = intval($list['is_send']); //分红人数 $list['team_grades_num'] = TeamGradesPoolDetail::find()->alias('pd')->where(['pd.pool_id' => $list['id']]) ->leftJoin(['tg' => TeamGrades::tableName()], 'pd.user_id = tg.user_id') ->leftJoin(['u' => User::tableName()], 'pd.user_id = u.id') ->leftJoin(['su' => SaasUser::tableName()], 'su.mobile = u.binding') ->andWhere(['u.is_delete' => 0, 'su.is_delete' => 0]) ->andWhere(['<>', 'u.binding', ''])->andWhere(['IS NOT', 'tg.id', NULL])->count(); // TeamGradesPoolDetail::find()->alias('tgpd')->leftJoin(['tg' => TeamGrades::tableName()], 'tgpd.user_id = tg.user_id') // ->where(['tgpd.pool_id' => $list['id']])->andWhere(['tg.is_delete' => 0])->count(); } return [ 'code' => 0, 'msg' => 'success', 'data' => [ 'data' => $pagination['list'], 'pageNo' => $pagination['pageNo'], 'totalCount' => $pagination['totalCount'], ] ]; } /** * 分红详情 */ public function detail() { try { $pool_id = $this->pool_id; if (!$pool_id) { throw new \Exception('参数错误'); } $store_id = $this->store_id; $nickname = $this->nickname; $mobile = $this->mobile; $start_time = $this->start_time; $end_time = $this->end_time; $is_send = $this->is_send; $pool = TeamGradesPool::findOne($pool_id); $query = TeamGradesPoolDetail::find()->alias('pd')->where(['pd.pool_id' => $pool_id]); $query->leftJoin(['tg' => TeamGrades::tableName()], 'pd.user_id = tg.user_id'); $query->leftJoin(['u' => User::tableName()], 'pd.user_id = u.id') ->leftJoin(['su' => SaasUser::tableName()], 'su.mobile = u.binding') ->andWhere(['u.is_delete' => 0, 'su.is_delete' => 0]) ->andWhere(['<>', 'u.binding', ''])->andWhere(['IS NOT', 'tg.id', NULL]); if (!empty(trim($nickname))) { $query->andWhere(['LIKE', 'su.name', $nickname]); } if (!empty(trim($mobile))) { $query->andWhere(['LIKE', 'su.mobile', $mobile]); } if ($start_time) { $start_time = strtotime($start_time); $query->andWhere(['>=', 'pd.send_time', $start_time]); } if ($end_time) { $end_time = strtotime($end_time); $query->andWhere(['<=', 'pd.send_time', $end_time]); } if ($is_send !== null && in_array($is_send, [TeamGradesPoolDetail::SEND_STATUS_NO, TeamGradesPoolDetail::SEND_STATUS_YES])) { $query->andWhere(['pd.is_send' => $is_send]); } //2025年4月28日10:04:33 此处新增排序:按用户团队等级从低到高,防止级差模式计算错误 $query->select('pd.id, su.name as nickname, su.mobile, su.avatar, pd.amount, pd.price, pd.is_send, pd.send_time, pd.user_id, pd.profit, pd.level')->orderBy(['tg.team_grades_level' => SORT_ASC]); $pagination = pagination_make($query); $last_tiered_bonus = 0; foreach ($pagination['list'] as &$list) { $list['is_send'] = intval($list['is_send']); $list['send_time'] = $list['send_time'] ? date('Y-m-d H:i:s', $list['send_time']) : ''; $userTeamGrades = TeamGrades::getUserTeamGrades($list['user_id']); //等级名称显示 如果列表无等级(奖励未发放)就显示的当前团队分红人员的实际等级 否则就显示下单时候的等级 $list['team_grades_level_name'] = TeamGradesLevel::getLevelInfo($list['level'], $store_id, 'level_name') ?: ''; if (empty($list['level'])) { $list['team_grades_level_name'] = $userTeamGrades['team_grades_level_name'] ?: ''; } if ($list['profit'] <= 0) { if (!empty($userTeamGrades['id'])) { if($pool->bonus_type == 0) { $result = TeamGradesPoolDetail::getPrice($list['amount'], $userTeamGrades['team_grades_level'], $store_id); $list['price'] = $result['price']; //获取当前等级可能的实际分红 $list['profit'] = $result['profit']; //获取当前等级的实际分红比例 } elseif($pool->bonus_type == 1) { $result = TeamGradesPoolDetail::getPrice($list['amount'], $userTeamGrades['team_grades_level'], $store_id, $last_tiered_bonus); $list['price'] = $result['price']; //获取当前等级可能的实际分红 $list['profit'] = $result['profit']; //获取当前等级的实际分红比例 $last_tiered_bonus = $result['tiered_bonus']; } else { $list['price'] = 0; $list['profit'] = 0; } } } } return [ 'code' => 0, 'msg' => 'success', 'data' => [ 'data' => $pagination['list'], 'pageNo' => $pagination['pageNo'], 'totalCount' => $pagination['totalCount'], 'bonus_type' => $pool->bonus_type, ] ]; } catch (\Exception $e) { return [ 'code' => 1, 'msg' => $e->getMessage() ]; } } public function send() { try { $pool_id = $this->pool_id; if (!$pool_id) { throw new \Exception('参数错误'); } $pool = TeamGradesPool::findOne($pool_id); if (!$pool) { throw new \Exception('数据不存在'); } if (intval($pool->is_send)) { throw new \Exception('团队业绩分红均已发放'); } return TeamGradesPoolDetail::sendPool($pool_id); } catch (\Exception $e) { return [ 'code' => 1, 'msg' => $e->getMessage() ]; } } }