| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- <?php
- namespace app\modules\admin\models\team_grades;
- use app\models\SaasUser;
- use app\models\TeamGrades;
- use app\models\TeamGradesLevel;
- use app\models\TeamGradesPool;
- use app\models\TeamGradesPoolDetail;
- use app\models\User;
- use yii\base\Model;
- class TeamPoolForm extends Model
- {
- public $pool_id;
- public $store_id;
- public $is_send;
- public $start_time;
- public $end_time;
- public $nickname;
- public $mobile;
- public function rules()
- {
- return [
- [['pool_id', 'store_id', 'is_send'], 'integer'],
- [['start_time', 'end_time', 'nickname', 'mobile'], 'string'],
- ];
- }
- public function list() {
- $store_id = $this->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()
- ];
- }
- }
- }
|