logic = $logic; } private function getTimeFilter($dateRange) { if (!$dateRange) { return []; } switch ($dateRange) { case 'week': $condition = [ ['create_time', '>', strtotime(date('Y-m-d 23:59:59', strtotime('-1 week')))], ['create_time', '<=', strtotime(date('Y-m-d 23:59:59'))] ]; break; case 'month': $condition = [ ['create_time', '>', strtotime(date('Y-m-d 23:59:59', strtotime('-1 month')))], ['create_time', '<=', strtotime(date('Y-m-d 23:59:59'))] ]; break; case 'year': $condition = [ ['create_time', '>', strtotime(date('Y-m-d 23:59:59', strtotime('-1 year')))], ['create_time', '<=', strtotime(date('Y-m-d 23:59:59'))] ]; break; case 'all': $condition = []; break; default: $startDate = substr($dateRange, 0, 10); $endDate = substr($dateRange, -10); $condition = [ ['create_time', '>=', strtotime(sprintf('%s 00:00:00', $startDate))], ['create_time', '<=', strtotime(sprintf('%s 23:59:59', $endDate))] ]; break; } return $condition; } /** * 客户询盘列表 * @param Request $request * @param $siteId * @return \Illuminate\Contracts\View\Factory|\Illuminate\Http\JsonResponse|\Illuminate\View\View */ public function index(Request $request, $siteId) { $dateRange = $request->input('time_range'); $condition = $this->getTimeFilter($dateRange); if (!$request->ajax()) { return view('admin/inquire/index', [ 'siteId' => $siteId ]); } $site = Site::query()->where(['id' => $siteId])->first(); $server = Server::query()->where(['server_id' => $site->server_id])->first(); $isDelete = $request->input('is_delete') ?? 0; list($records, $realInquire) = $this->logic->pageRecords($request, $server, $site, $condition, $isDelete); /** * @var \Illuminate\Contracts\Pagination\LengthAwarePaginator $records */ return response()->json([ 'rows' => $records->items(), 'total' => $records->total(), 'extra' => [ 'allInquire' => $records->total(), 'realInquire' => $realInquire ] ]); } //导出到excel public function exportExcel(Request $request, $siteId) { $dateRange = $request->input('time_range'); $condition = $this->getTimeFilter($dateRange); $site = Site::query()->where(['id' => $siteId])->first(); $server = Server::query()->where(['server_id' => $site->server_id])->first(); $records = $this->logic->pageRecordsExport($request, $server, $site, $condition); array_unshift($records, ['客户名字', '客户邮箱', '电话', '国家', '询盘时间', '询盘主题', '询盘内容', '是否真实询盘', '是否查看', '留言', '链接']); return (new InquireExport($records))->download(sprintf('询盘%s.xls', date('YmdHis'))); } //导出到excel public function exportAllExcel($siteId) { $site = Site::query()->where(['id' => $siteId])->first(); $server = Server::query()->where(['server_id' => $site->server_id])->first(); $records = $this->logic->PageRecordsAllExport($server, $site); array_unshift($records, ['id', 'user_id', 'notice', 'url', 'request', 'cookie', 'client_ip', 'create_time']); return (new InquireExport($records))->download(sprintf('询盘%s.xls', date('YmdHis'))); } /** * 项目详情客户询盘列表页面 * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View */ public function lists() { $user = auth()->user(); $site = $user->sites->first(); //读取分配的站点信息 if (!$site) { return view('admin/errors/tips', [ 'tips' => '没有分配的站点' ]); } $server = Server::query()->where(['server_id' => $site->server_id])->first(); if (!$server) { return view('admin/errors/tips', [ 'tips' => '服务器信息不存在' ]); } return view('admin/inquire/show_index', [ 'siteId' => $site->id, 'nowRoleId' => $user->role_id ]); } //分配用户 public function assignUser(Request $request) { $oneSite = $this->hasUserOneSite(); $inquireIds = $request->input('inquireIds'); $assignUserIds = $request->input('assignUserIds'); if (!$request->ajax()) { $selects = []; if (count($inquireIds) == 1) { $selects = DB::table('user_has_inquire')->where(['inquire_id' => $inquireIds[0]]) ->get()->pluck('user_id')->toArray(); } $selectCol = ['id', 'username', 'email', 'created_at', 'role_id', 'status', 'is_super', 'nickname']; $users = User::query()->select($selectCol) ->where([['role_id', '=', Role::TYPE_TYPE_CUSTOMER_STAFF]])->whereHas('sites', function (Builder $builder) use ($oneSite) { $builder->where('id', $oneSite->id); })->get()->toArray(); array_walk($users, function (&$item) use (&$selects) { $item['open'] = true; $item['name'] = $item['username'] . '[' . $item['nickname'] . ']'; if (in_array($item['id'], $selects)) { $item['checked'] = true; } }); return view('admin/inquire/user_assign', [ 'trees' => $users, 'inquireIds' => $inquireIds ]); } foreach ($inquireIds as $inquireId) { DB::table('user_has_inquire')->where(['inquire_id' => $inquireId])->delete(); $insertData = []; foreach ($assignUserIds as $userId) { $insertData[] = [ 'user_id' => $userId, 'inquire_id' => $inquireId ]; } DB::table('user_has_inquire')->insert($insertData); } return response()->json(['message' => '操作成功']); } //询盘详情 public function detail(Request $request, $id) { $siteId = $request->input('siteId'); $site = Site::query()->with('server')->where(['id' => $siteId])->first(); if (empty($site->server)) { return view('admin/errors/tips', [ 'tips' => '站点服务器信息不存在', 'closeBtn' => true ]); } $config = [ 'connection_name' => sprintf('connection_name_%s', $site->id), 'host' => $site->server->server_ip, 'port' => '3306', 'database' => $site->database, 'username' => $site->server->mysql_user_name, 'password' => $site->server->mysql_passwd, ]; config_connection($config); $record = DB::connection($config['connection_name'])->table('user_msg')->where([ 'id' => $id ])->first(); if (empty($record->is_read)) { DB::connection($config['connection_name'])->table('user_msg')->where([ 'id' => $id, 'is_read' => 0 ])->update(['is_read' => 1]); } return view('admin/inquire/detail', [ 'data' => $record, 'siteId' => $siteId ]); } //询盘详情 public function mailDetail(Request $request, $id) { $siteId = $request->input('siteId'); $site = Site::query()->with('server')->where(['id' => $siteId])->first(); if (empty($site->server)) { return view('admin/errors/tips', [ 'tips' => '站点服务器信息不存在', 'closeBtn' => true ]); } $config = [ 'connection_name' => sprintf('connection_name_%s', $site->id), 'host' => $site->server->server_ip, 'port' => '3306', 'database' => $site->database, 'username' => $site->server->mysql_user_name, 'password' => $site->server->mysql_passwd, ]; config_connection($config); $record = DB::connection($config['connection_name'])->table('user_msg')->where([ 'id' => $id ])->first(); return view('admin/inquire/mail_detail', [ 'data' => $record, 'siteId' => $siteId ]); } /** * 修改询盘状态 * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function whetherReality(Request $request) { try { $id = $request->input('id'); $status = $request->input('status'); $siteId = $request->input('siteId'); $site = Site::query()->with('server')->where(['id' => $siteId])->first(); $config = [ 'connection_name' => sprintf('connection_name_%s', $site->id), 'host' => $site->server->server_ip, 'port' => '3306', 'database' => $site->database, 'username' => $site->server->mysql_user_name, 'password' => $site->server->mysql_passwd, ]; config_connection($config); DB::connection($config['connection_name'])->table('user_msg')->where('id', $id)->update(['is_delete' => $status]); return response()->json(['message' => '操作成功']); } catch (\Throwable $exception) { return response()->json(['message' => '服务器失去链接'], 400); } } }