json(['message' => '域名不要包含www'], 400); } if ($existsSite = Site::query()->where(['domain' => $validated['site']['domain']])->first()) { if ($existsSite->id != $id) { return response()->json(['message' => '域名已存在'], 400); } } if ($id == 0) { $validated['site']['identifier'] = (new Site)->identifier(); if (empty($validated['site']['old_id'])) { //如果填写了说明是之前 rank上有 这里只是把它关联起来 try { //如果没有的话那就是默认要创建 并且关联 $siteSync = new SiteSyncLogic(); $oldId = $siteSync->insertGetId($siteSync->fieldMap($validated['site'])); $validated['site']['old_id'] = $oldId; } catch (\Throwable $throwable) { Log::error(var_export($throwable->getMessage(), 1)); return response()->json(['message' => '远程添加项目出错'], 400); } } $validated['site']['status'] = 1; //建站期 $validated['site']['server_id'] = 1; //20服务器 $site = Site::query()->create($validated['site']); $siteId = $site->id; SiteInfo::query()->create([ 'site_id' => $siteId, ]); DB::table('user_has_sites')->insert([ 'site_id' => $siteId, 'user_id' => Auth::id() ]); $validated['payment']['site_id'] = $siteId; SitePayment::query()->create($validated['payment']); (new ProcessLogic)->initProcess($siteId); //生成初始项目流程 } else { $site = Site::query()->where(['id' => $id])->first(); if (!$site) return response()->json(['message' => '数据不存在']); $site->update($validated['site']); SitePayment::query()->where(['site_id' => $id])->update($validated['payment']); // 同步老rank平台的数据 $siteSync = new SiteSyncLogic(); $siteSync->update($site->old_id, $siteSync->fieldMap($site->toArray())); } return response()->json(['message' => '操作成功']); } /** * 客户完善处理 * @param $validated * @param $act * @param $source * @param $siteId * @return \Illuminate\Http\JsonResponse */ public function customerHandle($validated, $act, $source, $siteId) { // $process = Process::query()->where(['identifier' => 'know_customer_info'])->first(); // if (!$process) return response()->json(['message' => '总流程信息不存在'], 400); // SiteProcess::query()->where(['site_id' => $siteId, 'process_id' => $process->id])->update(['active' => 1]); $user = auth()->user(); $site = Site::query()->where(['id' => $siteId])->first(); if (!$site) { return response()->json(['message' => '站点信息不存在'], 400); } $siteMap = ['site_id' => $siteId]; // $source = 'customer'; switch ($act) { case 'addition': if ($source == 'customer') { $addition = SiteAddition::query()->where($siteMap)->first(); $additionArr = $addition ? $addition->toArray() : []; $diff = array_diff_assoc($validated['addition'], $additionArr); if ($diff) { $oldData = []; $diffKeys = array_keys($diff); foreach ($diffKeys as $inx) { $oldData[$inx] = $additionArr[$inx] ?? ''; } CustomerLog::query()->create([ 'site_id' => $siteId, 'title' => '网站信息', 'old_content' => serialize($oldData), 'content' => serialize($diff), 'operator_id' => $user->id, 'operator_name' => $user->nickname, 'site_name' => $site->cn_title, 'type' => $act ]); } } SiteAddition::query()->updateOrCreate($siteMap, $validated['addition'] + $siteMap); break; case 'keyword': if ($source == 'customer') { $keyword = SiteInfo::query()->where($siteMap)->first(); $keywordArr = $keyword ? $keyword->keyword : []; $inputKeyword = $validated['keyword'] ?? []; $diff = array_diff_assoc($inputKeyword, $keywordArr); if ($diff) { $oldData = []; $diffKeys = array_keys($diff); foreach ($diffKeys as $inx) { $oldData[$inx] = $additionArr[$inx] ?? ''; } CustomerLog::query()->create([ 'site_id' => $siteId, 'title' => '核心关键词', 'old_content' => serialize($oldData), 'content' => serialize($diff), 'operator_id' => $user->id, 'operator_name' => $user->nickname, 'site_name' => $site->cn_title, 'type' => $act ]); } } SiteInfo::query()->updateOrCreate($siteMap, ['keyword' => ($validated['keyword'] ?? [])] + $siteMap); break; case 'station': if ($source == 'customer') { // $record = SiteStation::query()->where($siteMap)->first(); // $recordArr = $record ? $record->toArray() : []; // dump($validated['station'],$recordArr); // $diff = array_diff_assoc($validated['station'], $recordArr); // if ($diff) { // // $oldData = []; // $diffKeys = array_keys($diff); // foreach ($diffKeys as $inx) { // $oldData[$inx] = $additionArr[$inx] ?? ''; // } // // CustomerLog::query()->create([ // 'site_id' => $siteId, // 'title' => '其他项目信息', // 'old_content' => serialize($oldData), // 'content' => serialize($diff), // // 'operator_id' => $user->id, // 'operator_name' => $user->nickname, // 'site_name' => $site->cn_title, // 'type' => $act // ]); // } } $validated['station']['compete_sites'] = $validated['station']['compete_sites'] ?? null; SiteStation::query()->updateOrCreate($siteMap, $validated['station'] + $siteMap); break; case 'enterprise': if ($source == 'customer') { $record = SiteEnterprise::query()->where($siteMap)->first(); $recordArr = $record ? $record->toArray() : []; $diff = array_diff_assoc($validated['enterprise'], $recordArr); if ($diff) { $oldData = []; $diffKeys = array_keys($diff); foreach ($diffKeys as $inx) { $oldData[$inx] = $additionArr[$inx] ?? ''; } CustomerLog::query()->create([ 'site_id' => $siteId, 'title' => '项目基础信息', 'old_content' => serialize($oldData), 'content' => serialize($diff), 'operator_id' => $user->id, 'operator_name' => $user->nickname, 'site_name' => $site->cn_title, 'type' => $act ]); } } SiteEnterprise::query()->updateOrCreate($siteMap, $validated['enterprise'] + $siteMap); break; case 'marketer': if ($source == 'customer') { $record = SiteMarketer::query()->where($siteMap)->first(); $recordArr = $record ? $record->toArray() : []; $diff = array_diff_assoc($validated['marketer'], $recordArr); if ($diff) { $oldData = []; $diffKeys = array_keys($diff); foreach ($diffKeys as $inx) { $oldData[$inx] = $additionArr[$inx] ?? ''; } CustomerLog::query()->create([ 'site_id' => $siteId, 'title' => '营销发布人信息', 'old_content' => serialize($oldData), 'content' => serialize($diff), 'operator_id' => $user->id, 'operator_name' => $user->nickname, 'site_name' => $site->cn_title, 'type' => $act ]); } } SiteMarketer::query()->updateOrCreate($siteMap, $validated['marketer'] + $siteMap); break; case 'sns': if ($source == 'customer') { $record = SiteSns::query()->where($siteMap)->first(); $recordArr = $record ? $record->toArray() : []; $diff = array_diff_assoc($validated['sns'], $recordArr); if ($diff) { $oldData = []; $diffKeys = array_keys($diff); foreach ($diffKeys as $inx) { $oldData[$inx] = $additionArr[$inx] ?? ''; } CustomerLog::query()->create([ 'site_id' => $siteId, 'title' => 'SNS 社交资料', 'old_content' => serialize($oldData), 'content' => serialize($diff), 'operator_id' => $user->id, 'operator_name' => $user->nickname, 'site_name' => $site->cn_title, 'type' => $act ]); } } SiteSns::query()->updateOrCreate($siteMap, $validated['sns'] + $siteMap); break; default: return response()->json(['message' => '参数提交错误'], 400); } return response()->json(['message' => '操作成功']); } public function overview($siteId, $validated, $type) { if ($type == 1) { //基本信息 if (strpos($validated['site']['domain'], 'www') !== false) { return response()->json(['message' => '域名不要包含www'], 400); } if ($existsSite = Site::query()->where(['domain' => $validated['site']['domain']])->first()) { if ($existsSite->id != $siteId) { return response()->json(['message' => '域名已存在'], 400); } } $site = Site::query()->with(['server'])->where(['id' => $siteId])->first(); if (!$site) return response()->json(['message' => '数据不存在'], 400); if ($validated['site']['keyword_goal'] != $site->keyword_goal && $site->old_id) { $homepageReachCount = DB::connection('rank')->table('project_history')->select('top10') ->where([ ['project_id', '=', (int)$site->old_id], ['create_time', '<', time()] ])->orderByDesc('create_time')->first(); if ($validated['site']['keyword_goal'] > ($homepageReachCount->top10 ?? 0)) { $rankUpdate = [ 'reach_days' => 0, //达标天数 'expire_time' => 0, //预期到期时间 ]; } } $site->update($validated['site']); //同步老rank平台的数据 $siteSync = new SiteSyncLogic(); if (!empty($site->server)) { $server = ['server_ip' => $site->server->server_ip]; } $siteSync->update($site->old_id, $siteSync->fieldMap($site->toArray() + ($server ?? [])) + ($rankUpdate ?? [])); if ($site->status == 7) { DB::connection('rank')->table('project')->where(['id' => $site->old_id])->update(['allow_googlerank' => 0]); } //同步到模版站 if ($site->is_stencil == 1) { $connection = DB::connection('template'); $update = [ 'site_id' => $siteId, 'cn_title' => $site->cn_title ?? '', 'en_title' => $site->en_title ?? '', 'site_logo' => $site->site_logo ?? '', 'domain' => $site->domain ?? '', 'brand' => $site->brand ?? '', 'ip' => $site->server->server_ip ?? '', 'database' => $site->database ?? '', 'username' => $site->server->mysql_user_name ?? '', 'password' => $site->server->mysql_passwd ?? '', 'create_time' => date('Y-m-d') ]; $result = $connection->table('template_library_project_config')->where('site_id', $siteId)->first(); if (empty($result)) { $connection->table('template_library_project_config')->insert($update); } else { $connection->table('template_library_project_config')->where('site_id', $siteId)->update($update); } } return response()->json(['message' => '操作成功']); } elseif ($type == 2) { //详细信息 $site = Site::query()->with(['users'])->where(['id' => $siteId])->first(); if (!$site) return response()->json(['message' => '数据不存在'], 400); $validated['payment']['google_bid'] = json_encode($validated['payment']['google_bid']); SitePayment::query()->where(['site_id' => $siteId])->update($validated['payment']); return response()->json(['message' => '操作成功']); } elseif ($type == 3) { //详细信息 $site = Site::query()->with(['users'])->where(['id' => $siteId])->first(); if (!$site) return response()->json(['message' => '数据不存在'], 400); $userIds = array_merge( $validated['allot']['editor_ids'] ?? [], $validated['allot']['server_ids'] ?? [], $validated['allot']['article_ids'] ?? [], $validated['allot']['manager_ids'] ?? [], $validated['allot']['manage_helper_ids'] ?? [], $validated['allot']['planner_ids'] ?? [], $validated['allot']['optimizer_ids'] ?? [], $validated['allot']['bid_user_ids'] ?? [], $validated['allot']['seller_ids'] ?? [], $validated['allot']['web_ids'] ?? [], $validated['allot']['designer_ids'] ?? [], $validated['allot']['article_edit_ids'] ?? [], $validated['allot']['external_link_ids'] ?? [], $validated['allot']['chongqing_link_ids'] ?? [], $validated['allot']['optimization_editing_ids'] ?? [] ); foreach ($userIds as $key => $value) { if (empty($value)) { unset($userIds[$key]); } } $beforeUserIds = DB::table('user_has_sites')->where(['site_id' => $site->id])->pluck('user_id')->toArray(); $updateUserIds = User::query()->whereIn('role_id', [ Role::TYPE_AE, Role::TYPE_ARTICLE, Role::TYPE_SERVER, Role::TYPE_MANAGER, Role::TYPE_MANAGE_HELPER, Role::TYPE_OPTIMIZER, Role::TYPE_SELLER, Role::TYPE_BID, Role::TYPE_WEB, Role::TYPE_DESIGNER, Role::TYPE_PROPAGANDA, Role::TYPE_PLANNER, Role::TYPE_LINK, Role::TYPE_OPTIMIZATION_EDITING, Role::TYPE_SOFT_TEXT_SEARCH, Role::TYPE_LINK_PART_CHONGQING, ])->whereIn('id', $beforeUserIds)->pluck('id')->toArray(); $keepUserIds = []; foreach ($beforeUserIds as $beforeUserId) { if (!in_array($beforeUserId, $updateUserIds)) { $keepUserIds[] = $beforeUserId; } } $saveUserIds = array_unique(array_merge($userIds, $keepUserIds)); $site->users()->sync($saveUserIds); return response()->json(['message' => '操作成功']); } elseif ($type == 4) { $site = Site::query()->with(['server'])->where(['id' => $siteId])->first(); if (!$site) return response()->json(['message' => '数据不存在'], 400); //更改为实施期去掉当月上线目标 if ($validated['site']['status'] == 2) { $validated['site']['is_current_month_online'] = 0; } $site->update($validated['site']); if ($site->status == 7 || $site->status == 9 || $site->status == 10) { DB::connection('rank')->table('project')->where(['id' => $site->old_id])->update(['allow_googlerank' => 0]); } return response()->json(['message' => '操作成功']); } elseif ($type == 5) { $site = Site::query()->with(['server'])->where(['id' => $siteId])->first(); if (!$site) return response()->json(['message' => '数据不存在'], 400); $site->update($validated['site']); //同步老rank平台的数据 $siteSync = new SiteSyncLogic(); if (!empty($site->server)) { $server = ['server_ip' => $site->server->server_ip]; } $siteSync->update($site->old_id, $siteSync->fieldMap($site->toArray() + ($server ?? [])) + ($rankUpdate ?? [])); return response()->json(['message' => '操作成功']); } } public function socialPublishBak($validated, ConnectionInterface $connection, $site) { $contentRecords = $connection->table('content')->whereIn('id', $validated['checkIds'])->get(); $queues = []; $socialData = Social::query()->where(['site_id' => $site->id, 'type' => Social::LINKED])->first(); foreach ($contentRecords as $inx => $record) { if (empty($record->uri) || empty($record->summary)) { continue; } $thumb = trim($record->thumb); $url = sprintf('http://%s/%s', $site->domain, $record->uri); if (!$connection->table('content')->where(['parent_id' => $record->id])->exists()) { $url .= '.html'; } $queues[] = [ 'site_id' => $site->id, 'remote_content_id' => $record->id, 'media' => $thumb ? sprintf('http://%s%s', $site->domain, $record->thumb) : null, 'url' => $url, 'content' => str_replace('
', PHP_EOL, html_entity_decode(strip_tags($record->summary, '
'))), 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s'), 'publish_at' => date('Y-m-d H:i:s', strtotime('+' . ($validated['release_interval'] * $inx) . ' day', strtotime($validated['release_at']))), 'pin_board' => $validated['pin_board'], 'linkedin_orgid' => $socialData->linkedin_orgid ?? '' ]; } SocialPublish::query()->insert($queues); return response()->json(['message' => sprintf('操作成功!%s条记录符合!', count($queues))]); } public function socialPublish($validated, ConnectionInterface $connection, $site,$hootsuiteUser_id) { $label = ''; if (!empty($validated['label_id'])) { $labelList = DB::table('social_label') ->where('site_id', $site->id) ->whereIn('id', $validated['label_id']) ->pluck('label'); foreach ($labelList as $value) { $label .= '#' . $value . ' '; } } $contentRecords = $connection->table('content')->whereIn('id', $validated['checkIds'])->get(); $queues = []; $client = new Client(); //$hootsuiteUser = HootsuiteUser::query()->where(['id' => $site->id])->first(); if(empty($hootsuiteUser_id)){ $hootsuiteUser = HootsuiteUser::query()->where(['site_id' => $site->id])->first(); }else{ $hootsuiteUser = HootsuiteUser::query()->where(['id' => $hootsuiteUser_id])->first(); } $socialProfiles = $hootsuiteUser->social_profiles ?? []; $mapSocialProfiles = array_column($socialProfiles, null, 'id'); foreach ($contentRecords as $inx => $record) { if (empty($record->uri) || empty($record->summary)) { continue; } $thumb = trim($record->thumb); $string = substr($site->webmaster_domain, -1, 1); if ($string != '/') { $remoteImg = $thumb ? $site->webmaster_domain . $record->thumb : null; } else { $remoteImg = $thumb ? substr($site->webmaster_domain, 0, -1) . $record->thumb : null; } $publishAt = date('Y-m-d H:i:s', strtotime('+' . ($validated['release_interval'] * $inx) . ' day', strtotime($validated['release_at']))); $content = str_replace('
', PHP_EOL, html_entity_decode(strip_tags($record->summary, '
'))); if (strtotime($publishAt) < (time() + 60 * 10)) { return response()->json(['message' => '发布时间距离当前时间过近或小于当前时间'], 400); } if (!$connection->table('content')->where(['parent_id' => $record->id])->exists()) { $webmasterDomain = $site->webmaster_domain . $record->uri . '.html'; } else { $webmasterDomain = $site->webmaster_domain . $record->uri; } $newContent = $content . ' ' . $webmasterDomain . ' ' . $label; $lens = mb_strlen($newContent); if ($lens > 280) { $content = mb_substr($content, 0, 277 - $lens) . '...'; $newContent = $content . ' ' . $webmasterDomain . ' ' . $label; } $tempSocialProfiles = []; foreach ($mapSocialProfiles as $key => $item) { if (in_array($key, $validated['social_ids'])) { $tempSocialProfiles[] = $item; } } $url = sprintf('%s/admin/hootsuite/schedule-message', config('app.wall_url')); try { $response = $client->request('POST', $url, [ 'form_params' => [ 'siteId' => $site->id, 'socialIds' => $validated['social_ids'], 'remoteImg' => $remoteImg, 'content' => $newContent, 'sendAt' => $publishAt ] ]); if ($response->getStatusCode() != 200) { return response()->json(['message' => "发送失败"], 400); } $result = json_decode($response->getBody()->getContents(), true); if (!empty($result['errors'])) { return response()->json(['message' => ($result['errors'][0]['message'] ?? 'schedule error')], 400); } $queues = [ 'site_id' => $site->id, 'remote_content_id' => $record->id, 'media' => $remoteImg, 'url' => $webmasterDomain, 'content' => $newContent, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s'), 'publish_at' => $publishAt, 'social_ids' => json_encode($validated['social_ids'] ?? []), 'social_profiles' => json_encode($tempSocialProfiles ?? []), 'result' => json_encode($result['data'] ?? []), ]; HootsuiteHistory::query()->insert($queues); } catch (\GuzzleHttp\Exception\GuzzleException $exception) { Log::error(var_export($exception->getMessage(), 1)); return response()->json(['message' => '发布失败'], 400); } } return response()->json(['message' => sprintf('操作成功!%s条记录符合!', count($queues))]); } }