ReportController.php 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. <?php
  2. namespace App\Http\Controllers\Admin;
  3. use App\Http\Logics\Admin\ReportLogic;
  4. use App\Http\Models\Site;
  5. use App\Http\Requests\Report\ContractRequest;
  6. use App\Http\Requests\Report\SummaryRequest;
  7. use Illuminate\Http\Request;
  8. use App\Http\Controllers\Controller;
  9. use Illuminate\Support\Facades\DB;
  10. use App\Http\Traits\HasSites;
  11. /**
  12. * 项目管理下的 项目概况下的 月报扩展,数据报表
  13. * Class ReportController
  14. * @package App\Http\Controllers\Admin
  15. */
  16. class ReportController extends Controller
  17. {
  18. use HasSites;
  19. protected $logic;
  20. public function __construct(ReportLogic $logic)
  21. {
  22. $this->logic = $logic;
  23. }
  24. //数据报表
  25. public function index($siteId)
  26. {
  27. $site = Site::query()->where(['id' => $siteId])->select(['old_id'])->first();
  28. if (empty($site->old_id)) {
  29. return view('admin/site/tips', [
  30. 'siteId' => $siteId,
  31. 'tips' => '关联站点信息不存在'
  32. ]);
  33. }
  34. return view('admin/report/index_for_site', [
  35. 'site' => $site,
  36. 'siteId' => $siteId //admin/site/side_layout 需要此字段
  37. ]
  38. );
  39. }
  40. //客户界面的数据报表
  41. public function customerReport()
  42. {
  43. $site = $this->hasUserOneSite();
  44. if (!$site) {
  45. return view('admin/errors/tips');
  46. }
  47. if (empty($site->old_id)) {
  48. return view('admin/errors/tips', [
  49. 'tips' => '关联站点信息不存在'
  50. ]);
  51. }
  52. return view('admin/report/customer_report', [
  53. 'site' => $site,
  54. ]
  55. );
  56. }
  57. //月报扩展
  58. public function extend($siteId)
  59. {
  60. $sixMonth = [];
  61. for ($count = 1; $count <= 6; $count++) {
  62. $sixMonth[] = date('Ym', strtotime('first day of -' . $count . ' month'));
  63. }
  64. $site = Site::query()->where(['id' => $siteId])->first();
  65. if (empty($site->old_id)) {
  66. return view('admin/site/tips', [
  67. 'siteId' => $siteId,
  68. 'tips' => '关联站点信息不存在'
  69. ]);
  70. }
  71. $rankConnection = DB::connection('rank');
  72. $reportExtendList = $rankConnection->table('report_extend')
  73. ->where(['project_id' => $site->old_id])->limit(6)->orderBy('ym', 'desc')->get();
  74. $reportSummaryList = $rankConnection->table('report_summary')
  75. ->where(['project_id' => $site->old_id])->get()->map(function ($item) {
  76. return (array)$item;
  77. })->groupBy('ym')->toArray();
  78. $customList = $rankConnection->table('webmaster_custom')->whereIn('ym', $sixMonth)->where([
  79. 'project_id' => $site->old_id
  80. ])->get()->toArray();
  81. $ym = date('Ym', strtotime('-1 month'));
  82. $reportExtend = $rankConnection->table('report_extend')
  83. ->where(['project_id' => $site->old_id, 'ym' => $ym])->first();
  84. $summaryList = $rankConnection->table('report_summary')
  85. ->where(['project_id' => $site->old_id, 'ym' => $ym])->get()->toArray();
  86. $keyCustomList = array_column($customList, null, 'ym');
  87. $contract = $rankConnection->table('report_contract')->where(['project_id' => $site->old_id, 'ym' => $ym])->first();
  88. return view('admin/report/extend', [
  89. 'data' => $site,
  90. 'siteId' => $siteId,
  91. 'sixMonth' => $sixMonth,
  92. 'keyCustomList' => $keyCustomList,
  93. 'reportExtend' => $reportExtend,
  94. 'reportExtendList' => $reportExtendList,
  95. 'reportSummaryList' => $reportSummaryList,
  96. 'summaryList' => $summaryList,
  97. 'contractList' => $contract
  98. ]);
  99. }
  100. //月报扩展下的 外链文章同步
  101. public function syncCustomer(Request $request, $oldId)
  102. {
  103. $ymMapData = $request->input('ymMapData');
  104. if (!is_array($ymMapData)) {
  105. return response()->json(['message' => '参数错误'], 422);
  106. }
  107. foreach ($ymMapData as $key => $item) {
  108. $condition = ['project_id' => $oldId, 'ym' => $key];
  109. DB::connection('rank')->table('webmaster_custom')
  110. ->updateOrInsert($condition, [
  111. 'link_count' => $item['linkCount'],
  112. 'article_count' => $item['articleCount'],
  113. 'create_time' => time()
  114. ]);
  115. }
  116. return response()->json(['message' => '操作成功']);
  117. }
  118. //月报扩展下的 月度总结同步
  119. public function syncSummary(SummaryRequest $request, $oldId)
  120. {
  121. $validated = $request->validated();
  122. $validated['dataList'] = $validated['dataList'] ?? [];
  123. $validated['fileList'] = $validated['fileList'] ?? [];
  124. $ym = date('Ym', strtotime('-1 month'));
  125. $this->logic->syncSummary($ym, $oldId, $validated);
  126. $this->logic->syncFileExtend($ym, $oldId, $validated);
  127. return response()->json(['message' => '操作成功']);
  128. }
  129. //月报扩展下的 合同同步
  130. public function syncContract(ContractRequest $request, $oldId)
  131. {
  132. $rankConnection = DB::connection('rank');
  133. $ym = date('Ym', strtotime('-1 month'));
  134. $validated = $request->validated();
  135. $validated['create_time'] = time();
  136. $rankConnection->table('report_contract')->updateOrInsert(['ym' => $ym, 'project_id' => $oldId], $validated);
  137. return response()->json(['message' => '操作成功']);
  138. }
  139. //清除上一个月数据
  140. public function clearLastMonthData($siteId)
  141. {
  142. $lstMonth = date('Ym', strtotime('-1 month', strtotime(date('Y-m-01'))));
  143. $projectId = Site::query()->where('id', $siteId)->value('old_id');
  144. if (!empty($projectId)) {
  145. $rankConnection = DB::connection('rank');
  146. $rankConnection->table('webmaster_country')->where([['project_id', '=', $projectId], ['ym', '=', $lstMonth]])->delete();
  147. $rankConnection->table('webmaster_custom')->where([['project_id', '=', $projectId], ['ym', '=', $lstMonth]])->delete();
  148. $rankConnection->table('webmaster_effect')->where([['project_id', '=', $projectId], ['ym', '=', $lstMonth]])->delete();
  149. $rankConnection->table('webmaster_flow')->where([['project_id', '=', $projectId], ['flow_ym', '=', $lstMonth]])->delete();
  150. $rankConnection->table('webmaster_include')->where([['project_id', '=', $projectId], ['ym', '=', $lstMonth]])->delete();
  151. $rankConnection->table('webmaster_keyword')->where([['project_id', '=', $projectId], ['ym', '=', $lstMonth]])->delete();
  152. $rankConnection->table('webmaster_keyword_info')->where([['project_id', '=', $projectId], ['ym', '=', $lstMonth]])->delete();
  153. }
  154. return response()->json(['message' => '操作成功']);
  155. }
  156. //推送消息至app
  157. public function pushMessage($siteId)
  158. {
  159. DB::table('report_notice')->insert(['site_id' => $siteId]);
  160. $info = DB::table('report_notice_task')->where([['site_id', '=', $siteId], ['status', '=', 0]])->first();
  161. if (empty($info)) {
  162. DB::table('report_notice_task')->insert(['site_id' => $siteId]);
  163. }
  164. return response()->json(['message' => '操作成功']);
  165. }
  166. }