validate()) { $query = Share::find()->alias('s') ->where(['s.is_delete' => Share::SHARE_NOT_DELETE, 's.store_id' => $this->store_id]) ->leftJoin('{{%user}} u', 'u.id=s.user_id') ->leftJoin(['su' => SaasUser::tableName()], 'su.mobile = u.binding') ->andWhere(['u.is_delete' => User::USER_NOT_DELETE]); if ($this->keyword) { $query->andWhere([ 'or', ['like', 's.name', $this->keyword], ['like', 'su.name', $this->keyword], ['like', 'u.nickname', $this->keyword], ]); } if ($this->status) { $query->andWhere(['=', 's.status', $this->status ]); } else { $query->andWhere(['in', 's.status', [Share::SHARE_NO_AUDIT, Share::SHARE_AUDIT_PASS]]); } if ($this->phone) { $query->andWhere( ['u.binding' => $this->phone] ); } if ($this->platform == -1) { $query->andWhere( ['>','u.platform', -1] ); } else { if ($this->platform) { $query->andWhere( ['u.platform' => $this->platform] ); } } if ($this->status != '') { if ($this->status == Share::SHARE_NO_AUDIT || $this->status == Share::SHARE_AUDIT_PASS || $this->status == Share::SHARE_AUDIT_FAIL) { $query->andWhere(['s.status' => $this->status]); } } // TODO: 其他订单 $orderCount = Order::find()->where([ 'store_id' => $this->store_id, 'is_delete' => Order::IS_DELETE_FALSE]) ->andWhere(['<>', 'trade_status', Order::ORDER_FLOW_CANCEL]) ->andWhere('user_id = u.id')->select('count(1)'); // $pagination = new Pagination(['totalCount' => $count, 'pageSize' => $this->limit, 'page' => $this->page - 1]); // { // $orderCount = Order::find()->where([ // 'store_id' => $this->store_id, 'is_delete' => 0, 'is_cancel' => 0, 'is_recycle' => 0 // ])->andWhere('user_id = u.id')->select('count(1)'); // $msOrderCount = MsOrder::find()->where([ // 'store_id' => $this->store_id, 'is_delete' => 0, 'is_cancel' => 0 // ])->andWhere('user_id = u.id')->select('count(1)'); // $ptOrderCount = PtOrder::find()->where([ // 'store_id' => $this->store_id, 'is_delete' => 0 // ])->andWhere('user_id = u.id')->select('count(1)'); // $yyOrderCount = YyOrder::find()->where([ // 'store_id' => $this->store_id, 'is_delete' => 0 // ])->andWhere('user_id = u.id')->select('count(1)'); // } // $list = $query->orderBy('s.status ASC,s.addtime DESC') // ->select([ // 's.*', 'u.nickname', 'u.avatar_url', 'u.platform', 'u.time', 'u.price', 'u.total_price', 'u.id user_id', 'u.parent_id', // 'order_count' => $orderCount, 'ms_order_count' => $msOrderCount, 'pt_order_count' => $ptOrderCount, 'yy_order_count' => $yyOrderCount, // 'parent_nickname' => User::find()->alias('parent')->where('parent.id = u.parent_id')->select('nickname') // ]) // ->orderBy(['status' => SORT_ASC, 'total_price' => SORT_DESC]); $query->orderBy('s.status ASC,s.created_at DESC') ->andWhere(['and', ['is not', 'u.binding', null], ['<>', 'u.binding', ''], ['is not', 'su.mobile', null], ['<>', 'su.mobile', '']]) ->select([ 's.*', 'u.nickname', 'u.avatar_url', 'u.binding', 'u.platform', 'u.time', 'u.price', 'u.total_price', 'u.id user_id', 'u.parent_id', 'u.old_parent_id', 'order_count' => $orderCount ])->orderBy(['status' => SORT_ASC, 'total_price' => SORT_DESC]); $pagination = pagination_make($query); $list = $pagination['list']; foreach ($list as $key => &$value) { $value['level'] = (int)$value['level']; $share_level = ShareLevel::findOne(['store_id' => $this->store_id, 'is_delete' => ShareLevel::SHARE_NOT_DELETE, 'level' => $value['level']]); $value['level_name'] = $share_level->name; $first = $this->getTeam($value['user_id'], 1); $value['first']['count'] = count($first['data']); $value['first']['team'] = []; if ($value['first']['count'] > 0) { foreach ($first['data'] as $val_team_1) { $value['first']['team'][] = $val_team_1['nickname']; } } $second = $this->getTeam($value['user_id'], 2); $value['second']['count'] = count($second['data']); $value['second']['team'] = []; if ($value['second']['count'] > 0) { foreach ($second['data'] as $val_team_2) { $value['second']['team'][] = $val_team_2['nickname']; } } $third = $this->getTeam($value['user_id'], 3); $value['third']['count'] = count($third['data']); $value['third']['team'] = []; if ($value['third']['count'] > 0) { foreach ($third['data'] as $val_team_3) { $value['third']['team'][] = $val_team_3['nickname']; } } $value['created_at'] = date('Y-m-d H:i:s', $value['created_at']); $value['updated_at'] == 0 ? 'zzz' : date('Y-m-d H:i:s', $value['updated_at']); if ($value['old_parent_id'] == 0) { $value['parent_nickname'] = '总店'; } else { $parent = User::findOne(['id' => $value['old_parent_id']]); $value['parent_nickname'] = $parent['nickname'] ?? ''; } } $share_level = ShareLevel::find()->where([ 'store_id' => $this->store_id, 'is_delete' => ShareLevel::SHARE_NOT_DELETE, 'status' => ShareLevel::STATUS_ON, ])->select('level id, name')->asArray()->all(); return [ 'code' => 0, 'msg' => 'success', 'data' => [ 'data' => $list, 'pageNo' => $pagination['pageNo'], 'totalCount' => $pagination['totalCount'], 'share_level' => $share_level ], ]; } else { return [ 'code' => 1, 'msg' => $this->getErrorSummary(false)[0], ]; } } /** * 修改分销商等级 */ public function setShareLevel() { try { $id = $this->id; $level = $this->level; $share = Share::findOne($id); $share_level = null; if ($level > 0) { $share_level = ShareLevel::findOne([ 'store_id' => $this->store_id, 'is_delete' => ShareLevel::SHARE_NOT_DELETE, 'status' => ShareLevel::STATUS_ON, 'level' => $level ]); if (!$share_level) { throw new \Exception('等级查询失败'); } } $old_level = $share->level; $share->level = $share_level ? $share_level->level : $level; if ($share->save()) { $log = new ShareLevelLog(); $log->level = $share->level; $log->old_level = $old_level; $log->type = ShareLevelLog::TYPE_ADMIN; $log->value = 0; $log->store_id = $this->store_id; $log->user_id = $share->user_id; $log->save(); } return [ 'code' => 0, 'msg' => '修改状态成功' ]; } catch (\Exception $e) { return [ 'code' => 1, 'msg' => $e->getMessage(), ]; } } /** * 获取下级人员 * @param $user_id * @param $level * @return array */ public function getTeam($user_id, $level) { $firstQuery = User::find()->alias('f')->select('f.*') ->where(['f.is_delete' => User::USER_NOT_DELETE, 'f.old_parent_id' => $user_id, 'f.store_id' => $this->store_id]); $query = $firstQuery; if ($level > 1) { $secondQuery = User::find()->alias('s')->where(['s.is_delete' => User::USER_NOT_DELETE, 's.store_id' => $this->store_id])->innerJoin(['f' => $firstQuery], 'f.id=s.old_parent_id'); $query = $secondQuery; if ($level > 2) { $thirdQuery = User::find()->alias('t')->where(['t.is_delete' => User::USER_NOT_DELETE, 't.store_id' => $this->store_id])->innerJoin(['s' => $secondQuery], 's.id=t.old_parent_id'); $query = $thirdQuery; } } $list = $query->asArray()->all(); return [ 'code' => 0, 'msg' => 'success', 'data' => $list ]; } }