getLimit($params), function ($query) use ($params) { $query->select('id, nickname, avatar_url, mobile, level'); $query->andWhere(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED]); // 等级查询 if (isset($params['level'])) { $query->andWhere(['level' => $params['level']]); } // 用户ID查询 if (isset($params['user_id']) && !empty($params['user_id'])) { $query->andWhere(['id' => $params['user_id']]); } // 关键词查询 if (isset($params['keyword']) && !empty($params['keyword'])) { $query->andWhere([ 'or', ['like', 'nickname', $params['keyword']], ['like', 'mobile', $params['keyword']], ]); } // 会员等级 $query->with(['userLevel' => function ($query) { $query->select('id, mall_id, level, name, status'); }]); }); $levels = UserLevel::getListIndexByLevelColumn($this->mall_id, [StatusEnum::ENABLED, StatusEnum::DISABLED]); $user_id_arr = array_column($data['list'], 'id'); $user_id_arr && $user_team_statistics_list = UserTeamStatistics::lists([ 'where' => [['user_id' => $user_id_arr]], 'select' => 'user_id,user_team_total,user_direct_total,user_indirect_total,team_finish_order_total,team_finish_order_price_total,user_team_order_price_total', 'index' => 'user_id', ]); foreach ($data['list'] as &$user) { $user['level_name'] = isset($levels[$user['level']]) ? $levels[$user['level']] : MallSetting::getDefaultLevelName($this->mall_id); $user['user_team_total'] = $user['user_direct_total'] = $user['user_indirect_total'] = 0; if (isset($user_team_statistics_list[$user['id']])) { $user['user_team_total'] = $user_team_statistics_list[$user['id']]['user_team_total']; $user['user_direct_total'] = $user_team_statistics_list[$user['id']]['user_direct_total']; $user['user_indirect_total'] = $user_team_statistics_list[$user['id']]['user_indirect_total']; $user['team_finish_order_total'] = $user_team_statistics_list[$user['id']]['team_finish_order_total']; $user['team_finish_order_price_total'] = $user_team_statistics_list[$user['id']]['team_finish_order_price_total']; $user['user_team_order_price_total'] = $user_team_statistics_list[$user['id']]['user_team_order_price_total']; } } return $data; } /** * 个人团队下面的业绩 * * @param integer $uid * @param array $params * @return array */ public function getTeamAchievementPageList(int $uid, array $params = []) { $total_order_num = 0; $total_pay_money = 0; $total_pay_achievement = 0; $list = UserTeamAchievementOrder::getPaginationListByUid($uid, $this->getLimit($params), function($query) use ( $params, &$total_order_num, &$total_pay_money, &$total_pay_achievement, $uid ) { $query->where(['superior_user_id' => $uid, 'status' => 2]); $query->with(['order' => function($query) { $query->select([ 'id', 'user_id', 'order_no', 'goods_price', 'pay_money', 'IFNULL(shipping_money, 0) as shipping_money', '(pay_money - IFNULL(shipping_money, 0)) as achievement', 'pay_time', 'created_at' ]); }, 'user' => function($query) { $query->select('id, nickname, mobile, avatar_url'); }]); // 时间查询 if (isset($params['date']) && !empty($params['date'])) { $query->andWhere([ 'between', 'created_at', strtotime($params['date'][0]), (strtotime($params['date'][1]) + 86399) ]); } // 时间查询 if (isset($params['keyword']) && $params['keyword'] !== '') { $keywordOrWhere = ['or', ['like', 'nickname', $params['keyword']]]; if (is_numeric($params['keyword'])) { $keywordOrWhere[] = ['like', 'mobile', $params['keyword']]; $keywordOrWhere[] = ['=', 'id', $params['keyword']]; } $query->andWhere([ 'user_id' => User::find() ->where([ 'mall_id' => $this->mall_id, 'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED] ]) ->andWhere($keywordOrWhere) ->select('id') ->column() ]); } // 统计 $query2 = clone $query; $total_pay_money = Order::find()->where(['id' => $query2->select('order_id')])->sum('pay_money'); $total_pay_achievement = Order::find()->where(['id' => $query2->select('order_id')])->sum('(pay_money - IFNULL(shipping_money, 0))'); $total_order_num = $query->count(); }, 'id desc'); // 统计 总金额,订单数 $list['total_pay_money'] = $total_pay_money; $list['total_order_num'] = $total_order_num; $list['total_pay_achievement'] = $total_pay_achievement; return $list; } /** * 团队业绩导出 * @return bool */ public function achievementExport(array $data) { $download_id = $data['download_id'] ?? 0; $download = Download::findOne(['id' => $download_id]); if (!$download) { return false; } try { $params = json_decode($download->params, true); if (empty($params)) { \Yii::$app->custom->logs('团队业绩导出参数为空'); return false; } $filename = $download->name; $type = $download->type; $where = ['AND']; $where[] = ['status' => 2, 'superior_user_id' => $params['uid'], 'mall_id' => $params['mall_id']]; if (!empty($params['date'])) { $where[] = ['between', 'created_at', strtotime(reset($params['date'])), strtotime(end($params['date'])) + 86400]; } $userTeam = UserTeamAchievementOrder::getTeamAchievementList($params['uid'], $where) ->with(['order'=> function ($query) { $query->select([ 'id', 'user_id', 'order_no', 'goods_price', 'pay_money', 'IFNULL(shipping_money, 0) as shipping_money', '(pay_money - IFNULL(shipping_money, 0)) as achievement', 'pay_time', 'created_at' ])->with(['detail' => function ($query) { $query->select(['order_id', 'goods_name', 'goods_attr_name', 'goods_price', 'price', 'num']); }]); }, 'user' => function ($query) { $query->select('id, nickname, mobile, avatar_url'); }])->orderBy('id desc'); $exportList = []; foreach ($userTeam->asArray()->batch() as $user) { foreach ($user as $item) { foreach ($item['order']['detail'] as $k => $detail) { if ($k == 0) { $achievement = $item['order']['achievement'] ?? ''; } else { $achievement = ''; } $exportList[] = [ $item['user_id'], $item['user']['nickname'] ?? '', $item['user']['mobile'] ?? '', $item['order']['order_no'] ?? '', $detail['goods_name'] ?? '', $detail['goods_attr_name'] ?? '', $detail['num'] ?? '', $detail['goods_price'] ?? '', $item['order']['shipping_money'] ?? '', $achievement, !empty($item['order']['pay_time']) ? date('Y-m-d H:i:s', $item['order']['pay_time']) : '', !empty($item['order']['created_at']) ? date('Y-m-d H:i:s', $item['order']['created_at']) : '', ]; } } } if (!empty($exportList)) { $csv = new CsvTool(); $csv->filename = $filename; $csv->file_dirname = DownloadEnum::getTypeStorageDirMap($type); $csv->export_mode = CsvTool::EXPORT_MODE_ASYNC; $csv->header = ['会员ID', '会员昵称', '会员手机号', '订单号', '商品名称', '规格', '购买数量', '支付金额', '运费', '业绩', '支付时间', '下单时间']; $csv->data = $exportList; $csv->export(); $csv->updateDown($download, $params['mall_id']); } } catch (Exception $e) { $download->status = 3; $download->save(); $this->setError($e->getMessage()); return false; } return true; } }