request; if ($retuest->isAjax) { if ($retuest->isGet) { $get = Yii::$app->request->get(); // 检查提交的参数 $res = Yii::$app->services->validate->validate($get,[ [['id','mobile'], 'integer'], ]); if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage()); $where = $list = $frozen_money_arr = $total_pay_arr = []; $where[] = ['=', 'mall_id', $this->mall_id]; !empty($get['id']) && $where[] = ['=', 'id', $get['id']]; if (!empty($get['mobile'])) { $user_id = User::find()->select('id')->where(['mall_id' => $this->mall_id, 'mobile' => $get['mobile'], 'status' => StatusEnum::ENABLED])->scalar(); if (empty($user_id)) return $this->error('手机号码不存在'); $where[] = ['=', 'id', $user_id]; } $where[] = ['=', 'status', StatusEnum::ENABLED]; $with = ['parent' => function($query){ $query->select('id,nickname,mobile,avatar_url'); }, 'userTeamStatistics' => function($query){ $query->select('user_id,user_team_total')->where(['status' => StatusEnum::ENABLED]); }, 'userWallet' => function($query){ $query->select('user_id,commission'); }]; $select = "id,nickname,mobile,avatar_url,parent_id"; $order = 'created_at desc'; $params = array('where' => $where, 'order'=>$order, 'with' => $with, 'select' => $select, 'limit' => $get['limit']); $list = User::listPage($params, false, true); if ($list['list']) { $user_ids = array_column($list['list'], 'id'); // 获取用户累计消费金额 $total_pay_arr = $this->getUserStatisticsTotal($user_ids); $frozen_money_arr = $this->getUserFrozenMoney($user_ids); } return $this->success('获取成功', compact('list','total_pay_arr', 'frozen_money_arr')); } } else { return $this->render($this->action->id); } } /** * 团队数据 * * @param int $user_id * @param int $status 1:直推客户-下级 2:间推客户-下级的下级 3:我的团队-全部下级 4:推荐人-全部上级 * @param string $keyword 关键字 * @param int $search_type 1:会员ID 2:会员昵称 3:手机号码 * @param int $page * @return mixed|array|void */ public function actionMyCustomer() { ini_set('memory_limit', '512M'); // 将内存限制设置为512M if (!Yii::$app->request->isAjax) { $user_id = Yii::$app->request->get('user_id'); if (!$user_id) throw new \Exception('用户不存在'); $where[] = ['=', 'u.id', $user_id]; $join = [['LEFT JOIN', User::tableName() . ' as p', 'u.parent_id = p.id']]; $select = ['u.id', 'u.nickname', 'u.mobile', 'u.parent_id','u.avatar_url', 'u.created_at', 'p.nickname p_nickname']; $params = [ 'where' => $where, 'alias' => 'u', 'select' => $select, 'join' => $join ]; $model = User::find(); User::paramPack($params, $model); $user_info = $model->asArray()->one(); if (empty($user_info)) throw new \Exception('用户不存在'); // 团队用户数据统计 $statistics = UserTeamStatistics::find()->select('user_team_total,user_direct_total,user_indirect_total')->where(['user_id' => $user_id, 'status' => StatusEnum::ENABLED])->asArray()->one(); $user_info['team_num'] = $statistics['user_team_total'] ?: 0; $user_info['first_num'] = $statistics['user_direct_total'] ?: 0; $user_info['second_num'] = $statistics['user_indirect_total'] ?: 0; //累计消费 $user_info['pay_money'] = UserStatisticsTotal::find()->where(['user_id' => $user_id])->sum('pay_money'); $sum_field = 'pay_goods_num'; if (MallAddons::isInstall($this->mall_id, AddonsEnum::ADDONS_NAME_AGENT) > 0){ //读取插件配置 $more_setting = \Yii::$app->services->setting->addons->get($this->mall_id, AddonsEnum::ADDONS_NAME_AGENT, 'more'); $compute_type = $more_setting['compute_type'] ?? 1; $sum_field = $compute_type == 0 ? 'finish_goods_num' : 'pay_goods_num'; } //团队购买数量 $child_ids = UserPartitionRelationship::getChildIdArr($user_id); $child_ids[] = $user_id; $user_info['pay_goods_num'] = UserStatisticsTotal::find()->where(['user_id' => $child_ids])->sum($sum_field) ?? 0; // CapitalLog::$capitalType = 'commission_frozen'; //累计佣金 // $user_info['commission'] = CapitalLog::find()->where(['user_id' => $user_id, 'change_type' => CapitalLog::CHANGE_TYPE_ADD])->sum('change_num'); //未结算 // $user_info['not_income'] = CapitalLog::find()->where(['user_id' => $user_id, 'change_type' => CapitalLog::CHANGE_TYPE_ADD, 'status' => CapitalLog::STATUS_WAIT_SEND])->sum('change_num'); // 获取用户钱包 $wallet = UserWallet::find()->where(['user_id' => $user_id, 'status' => StatusEnum::ENABLED])->asArray()->one(); $user_info['commission'] = empty($wallet) ? 0 : $wallet['total_commission'] + $wallet['frozen_commission'];// 累计佣金 = 累计可用+待结算 $user_info['not_income'] = $wallet['frozen_commission'] ?: 0;// 冻结佣金 $user_info['created_at'] = date('Y-m-d H:i:s', $user_info['created_at']); $user_info['pay_money'] = bcadd( $user_info['pay_money'],0,2); $user_info['commission'] = bcadd( $user_info['commission'],0,2); $user_info['not_income'] = bcadd( $user_info['not_income'],0,2); return $this->render('my-customer', ['user_info' => json_encode($user_info)]); } $get = Yii::$app->request->get(); $res = Yii::$app->services->validate->validate($get, [ [['user_id'], 'required'], [['user_id', 'status', 'page'], 'integer'], [['keyword', 'search_type'],'safe'] ]); if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage()); $user_id = $get['user_id']; $status = $get['status'] ?? 1; $keyword = $get['keyword'] ?? ''; $search_type = $get['search_type'] ?? 1; $page = $get['page'] ?? 1; switch ($status) { case '1': $user_relations = UserPartitionRelationship::getRelationship($user_id, $page, $keyword, $search_type, 1, 1); break; case '2': $user_relations = UserPartitionRelationship::getRelationship($user_id, $page, $keyword, $search_type, 1, 2); break; case '3': $user_relations = UserPartitionRelationship::getRelationship($user_id, $page, $keyword, $search_type, 1); break; case '4': // 避免空搜索查询 // if ($search_type == 1 && $keyword) { // $parent_id = User::find()->select('id')->where(['parent_id' => $keyword, 'status' => StatusEnum::ENABLED])->scalar(); // if ($parent_id != $keyword) return $this->success('操作成功', ['list' => [], 'page_count' => 0]); // } // $user_relations = UserPartitionRelationship::getRelationship($user_id, $page, $keyword, $search_type, 2,3); $parent_ids = UserPartitionRelationship::getParentIdArr($user_id); if ($parent_ids) $parent_ids = array_reverse($parent_ids); // 搜索 if ($parent_ids && $search_type > 0 && $keyword !== '') { $userSearchModel = User::find() ->select('id') ->where(['id' => $parent_ids]); if ($search_type == 1) { $userSearchModel->andWhere(['=', 'id', $keyword]); } elseif ($search_type == 2) { $userSearchModel->andWhere(['=', 'nickname', $keyword]); } elseif ($search_type == 3) { $userSearchModel->andWhere(['=', 'mobile', $keyword]); } elseif ($search_type == 4) { $userSearchModel->andWhere(['=', 'level', $keyword]); } $parent_ids = array_intersect($parent_ids, $userSearchModel->column()); } $page_parent_ids = array_slice($parent_ids, ($page - 1) * 10, 10); if ($page_parent_ids) { $temp_user_relations = []; foreach ($page_parent_ids as $uid) { $temp_user_relations[$uid] = $uid; } $user_relations['list'] = $temp_user_relations; $user_relations['count'] = count($parent_ids); } break; } if (empty($user_relations)) return $this->success('操作成功', ['list' => [], 'page_count' => 0]); $user_list = $user_relations['list']; $user_ids = array_keys($user_list); $where[] = ['in', 'u.id', $user_ids]; $select = ['u.id', 'u.nickname', 'u.mobile', 'u.level', 'u.avatar_url', 'ust.user_id', 'ust.pay_money', 'ust.pay_num','ust.pay_goods_num','ust.finish_goods_num']; $join = [['LEFT JOIN', UserStatisticsTotal::tableName() . ' as ust', 'u.id=ust.user_id']]; //需要查询父级 if (in_array($status, [2,3])) { array_push($select, 'p.id p_id', 'p.avatar_url p_avatar_url', 'p.nickname p_nickname'); array_push($join, ['LEFT JOIN', USER::tableName() . ' as p', 'p.id=u.parent_id']); } $params = [ 'alias' => 'u', 'where' => $where, 'select' => $select, 'join' => $join ]; if ($user_ids) $params['order'] = ["FIELD(`u`.`id`,".implode(',', $user_ids).")" => true]; $model = User::find(); User::paramPack($params, $model); $list = $model->asArray()->all(); $sum_field = 'pay_goods_num'; if (MallAddons::isInstall($this->mall_id, AddonsEnum::ADDONS_NAME_AGENT) > 0){ //读取插件配置 $more_setting = \Yii::$app->services->setting->addons->get($this->mall_id, AddonsEnum::ADDONS_NAME_AGENT, 'more'); $compute_type = $more_setting['compute_type'] ?? 1; $sum_field = $compute_type == 0 ? 'finish_goods_num' : 'pay_goods_num'; } $levels = UserLevel::getListIndexByLevelColumn($this->mall_id, [StatusEnum::ENABLED,StatusEnum::DISABLED]); $defaultLevelName = MallSetting::getDefaultLevelName($this->mall_id); foreach ($list as &$val) { $val['pay_money'] = $val['pay_money'] ?? 0; $val['pay_num'] = $val['pay_num'] ?? 0; $val['pay_goods_num'] = $val[$sum_field] ?? 0; $val['bind_time'] = isset($user_list[$val['id']]) ? $user_list[$val['id']] : '暂无'; $val['level_text'] = $levels[$val['level']] ?? $defaultLevelName; } $export = MallUser::getExportList(); $data = ['list' => $list, 'export' => $export, 'page_count' => ceil($user_relations['count'] / 10)]; return $this->success('操作成功', $data); } /** * 获取用户的累计消费金额 * @param $user_ids * @return array */ private function getUserStatisticsTotal($user_ids) { $data = []; $list = UserStatisticsTotal::find()->select('user_id,pay_money')->where(['user_id' => $user_ids, 'status' => StatusEnum::ENABLED])->asArray()->all(); if ($list) { foreach ($list as $item) { $data[$item['user_id']] = $item['pay_money']; } } return $data; } /** * 获取用户的累计消费金额 * @param $user_ids * @return array */ private function getUserFrozenMoney($user_ids) { $data = []; CapitalLog::$capitalType = 'commission_frozen'; $statistics_list = CapitalLog::find()->where(['mall_id' => $this->mall_id, 'user_id' => $user_ids, 'status' => 0])->asArray()->all(); if ($statistics_list) { foreach ($statistics_list as $val) { if ($val['change_type'] == 'add') $data[$val['user_id']] += $val['change_num']; if ($val['change_type'] == 'sub') $data[$val['user_id']] -= $val['change_num']; } } return $data; } /** * 佣金类型 * @Author: lun * @DateTime: 2022/6/29 0029 19:54 * @Copyright: copyright (c) 2021 广东七件事集团 * @return array|mixed|void */ public function actionMyCommission() { $user_id = Yii::$app->request->get('user_id'); if (!$user_id) return []; $params = Yii::$app->request->get(); CapitalLog::$capitalType = 'commission'; $where[] = ['user_id'=>$user_id]; $where[] = ['mall_id'=>$this->mall_id]; if (Yii::$app->request->get('id')) $where[] = ['>', 'id', Yii::$app->request->get('id')]; if (Yii::$app->request->get('capital_type')) $where[] = ['=', 'capital_type', Yii::$app->request->get('capital_type')]; $capital_type = UserWalletEnum::getCapitalTypeMapByCommission(); $params['where'] = $where; $params['select'] = 'change_type,change_num,current_num,created_at,from_type,capital_type,id,desc'; $params['order'] = 'id desc'; $params['limit'] = 10; $list = CapitalLog::listPage($params); $list['capital_type'] = $capital_type; return $this->success('操作成功', $list); } /** * 导出我的团队 * * @return string */ public function actionExport() { if ($this->request->isPost) { $data = Yii::$app->request->post(); $data['mall_id'] = $this->mall_id; $filename = '我的团队-' . date('YmdHis') . '_' . rand(10000, 99999); $res = CsvExportHelper::exportDownLoadCenter( $this->mall_id, $filename, DownloadEnum::TYPE_AGENT, MallUser::class, 'exportHandle', $data ); if ($res === false) return $this->error('加入导出任务失败' . CsvExportHelper::getStaticError()); return $this->success('添加导出任务成功,任务完成后请在下载中心进行下载!'); } } public function actionOrder() { if (Yii::$app->request->isAjax) { if (Yii::$app->request->isGet) { $get = Yii::$app->request->get(); $res = Yii::$app->services->validate->validate($get, [ [['user_id'], 'required'], [['user_id', 'limit', 'page'], 'integer'], [['keyword', 'order_no', 'start_date', 'end_date'],'string'] ]); if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage()); $where = [ ['mall_id' => $this->mall_id], ['user_id' => $get['user_id']], ['status' => StatusEnum::ENABLED] ]; if (!empty($get['start_date'])) $where[] = ['>=', 'created_at', strtotime($get['start_date'])]; if (!empty($get['end_date'])) $where[] = ['<=', 'created_at', strtotime($get['end_date'])]; if (!empty($get['keyword'])) { $details = OrderDetail::listPage([ 'where' => array_merge($where, [[ 'or', ['like', 'goods_id', $get['keyword']], ['like', 'goods_name', $get['keyword']] ]]), 'limit' => $get['limit'] ?? 10, 'order' => 'id desc', 'select'=> 'order_id', 'group' => 'order_id', ]); if (empty($details['list'])) return []; $where[] = ['id' => array_column($details['list'], 'order_id')]; } if (!empty($get['order_no'])) $where[] = ['like', 'order_no', $get['order_no']]; $ret = Order::listPage([ 'where' => $where, 'limit' => $get['limit'] ?? 10, 'order' => 'id desc', 'with' => ['detail'], ]); if (!empty(OrderDetail::getStaticError())) return $this->error(OrderDetail::getStaticError()); $ret['export_list'] = Order::fieldsList(); $ret['export_where'] = $where; $down = Download::getOne([ ['mall_id'=>$this->mall_id], ['type'=>DownloadEnum::TYPE_ORDERS], ['like','name','订单列表'.'%',false] ],true,[],'id desc'); if(!empty($down)){ $down['params'] = json_decode($down['params'],true); $ret['fields'] = $down['params']['fields']; } return $this->success('获取成功', $ret); } elseif (Yii::$app->request->isPost) { $post = \Yii::$app->request->post(); $post['mall_id'] = $this->mall_id; $post['flag'] = 'EXPORT'; $post['child_orders'] = true; if (!empty($post['page'])) unset($post['page']); $filename = '团队数据-订单列表-' . date('YmdHis').'_'.rand(10000,99999); $res = CsvExportHelper::exportDownLoadCenter($this->mall_id,$filename,DownloadEnum::TYPE_ORDERS, Order::class,'exportHandle', $post); if ($res === false) return $this->error('加入导出任务失败'.CsvExportHelper::getStaticError()); return $this->success('添加导出任务成功,任务完成后请在下载中心进行下载!'); } } return $this->render($this->action->id); } public function actionSetting() { $request = Yii::$app->request; if ($request->isAjax) { try { if ($request->isGet) { $setting = \Yii::$app->services->setting->addons->get($this->mall_id, TeamDataEnum::ADDONS_NAME, 'basic'); return $this->success('获取成功', ['basic' => $setting]); } if ($request->isPost) { $post = $request->post(); $res = Yii::$app->services->validate->validate($post, [ [['settle_type', 'is_sub_refund'], 'integer'], ]); if (!$res) throw new Exception(Yii::$app->services->validate->getErrorMessage()); $res = \Yii::$app->services->setting->addons->set($this->mall_id, TeamDataEnum::ADDONS_NAME, ['basic' => $post]); return $this->success('操作成功'); } } catch (\Exception $e) { return $this->error($e->getMessage()); } } return $this->render($this->action->id); } }