CallbackLogController.php 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. <?php
  2. namespace Modules\Callback\Http\Controllers;
  3. use Catch\Base\CatchController;
  4. use Illuminate\Foundation\Validation\ValidatesRequests;
  5. use Illuminate\Http\Request;
  6. use Illuminate\Support\Facades\DB;
  7. use Modules\Callback\Services\CallbackConst;
  8. use Modules\Callback\Services\TiktokEventReportService;
  9. use Modules\Common\Errors\Errors;
  10. use Modules\Common\Exceptions\CommonBusinessException;
  11. class CallbackLogController extends CatchController
  12. {
  13. use ValidatesRequests;
  14. /**
  15. * 回传日志列表
  16. * @param Request $request
  17. * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator|\Illuminate\Support\Collection
  18. */
  19. public function list(Request $request) {
  20. $advertiserId = $request->input('advertiser_id');
  21. $uid = $request->input('uid');
  22. $advPromotionId = $request->input('adv_promotion_id');
  23. $userRanseStartAtBeginTime = $request->input('user_ranse_start_at_begin_time');
  24. $userRanseStartAtEndTime = $request->input('user_ranse_start_at_end_time');
  25. $orderCreatedAtBeginTime = $request->input('order_created_at_begin_time');
  26. $orderCreatedAtEndTime = $request->input('order_created_at_end_time');
  27. $miniprogramId = $request->input('miniprogram_id');
  28. $isExport = $request->input('is_export', false);
  29. $orderNo = $request->input('order_no');
  30. $orderPriceStart = $request->input('order_price_start');
  31. $orderPriceEnd = $request->input('order_price_end');
  32. $callbackType = $request->input('callback_type', 1);
  33. $callbackConfigId = $request->input('callback_config_id');
  34. $sql = DB::table('callback_report_charge_record')
  35. ->where([
  36. 'optimizer_uid' => $this->getLoginUserId(),
  37. 'callback_type' => $callbackType,
  38. ])->when($orderNo, function ($query, $orderNo){
  39. return $query->where('order_no', $orderNo);
  40. })->when($callbackConfigId, function ($query, $callbackConfigId){
  41. return $query->where('callback_config_id', $callbackConfigId);
  42. })->when($orderPriceStart, function ($query, $orderPriceStart){
  43. return $query->where('order_price', '>=', $orderPriceStart);
  44. })->when($orderPriceEnd, function ($query, $orderPriceEnd){
  45. return $query->where('order_price', '<', $orderPriceEnd);
  46. })
  47. ->when($advertiserId, function ($query, $advertiserId) {
  48. return $query->where('advertiser_id', $advertiserId);
  49. })->when($uid, function ($query, $uid) {
  50. return $query->where('uid', $uid);
  51. })->when($advPromotionId, function ($query, $advPromotionId){
  52. return $query->where('adv_promotion_id', $advPromotionId);
  53. })->when($userRanseStartAtBeginTime, function ($query, $userRanseStartAtBeginTime){
  54. return $query->where('user_ranse_start_at', '>=', $userRanseStartAtBeginTime);
  55. })->when($userRanseStartAtEndTime, function ($query, $userRanseStartAtEndTime){
  56. return $query->where('user_ranse_start_at', '<=', $userRanseStartAtEndTime . ' 23:59:59');
  57. })->when($orderCreatedAtBeginTime, function ($query, $orderCreatedAtBeginTime){
  58. return $query->where('order_created_at', '>=', $orderCreatedAtBeginTime);
  59. })->when($miniprogramId, function ($query, $miniprogramId){
  60. return $query->where('miniprogram_id', $miniprogramId);
  61. })
  62. ->when($orderCreatedAtEndTime, function ($query, $orderCreatedAtEndTime) {
  63. return $query->where('order_created_at', '<=', $orderCreatedAtEndTime. ' 23:59:59');
  64. })->orderBy('created_at', 'desc');
  65. if($isExport) {
  66. $result = $sql->get();
  67. } else {
  68. $result = $sql->paginate($request->integer('limit', 15));
  69. }
  70. $reportSuccessStr = [
  71. 0 => '回传失败',
  72. 1 => '回传成功',
  73. 2 => '补传成功',
  74. ];
  75. $advertisers = $callbackNames = collect();
  76. $currentUid = $this->getLoginUserId();
  77. if(CallbackConst::TYPE_JL_ACCOUNT == $callbackType) {
  78. $advertisers = DB::table('juliang_account_callback_config')
  79. ->where('company_uid', $currentUid)
  80. ->select('adv_account_id', 'adv_account_name')
  81. ->get()->keyBy('adv_account_id');
  82. } elseif (CallbackConst::TYPE_JL_EVENT_20 == $callbackType){
  83. $callbackNames = DB::table('jl_event_callback_config')
  84. ->where('user_id', $currentUid)
  85. ->whereIn('id', $result->pluck('callback_config_id'))
  86. ->select('id', 'name')->get()->keyBy('id');
  87. $promotionNames = DB::table('promotions')
  88. ->where('uid', $currentUid)
  89. ->whereIn('id', $result->pluck('user_ranse_id'))
  90. ->select('id', 'name')->get()->keyBy('id');
  91. }
  92. foreach ($result as $item) {
  93. if(CallbackConst::TYPE_JL_ACCOUNT == $callbackType) {
  94. $item->advertiser_name = $advertisers->get($item->advertiser_id ?? -1)->adv_account_name ?? '';
  95. } elseif(CallbackConst::TYPE_JL_EVENT_20 == $callbackType) {
  96. $item->callback_config_name = $callbackNames->get($item->callback_config_id ?? -1)->name ?? '';
  97. $item->ranse_name = $promotionNames->get($item->user_ranse_id ?? -1)->name ?? '';
  98. }
  99. if('ok' == $item->filter_type ) {
  100. $item->filter_reason .= '-'. $reportSuccessStr[$item->report_success] ?? '';
  101. }
  102. if('ok' == $item->filter_type && (0 != $item->report_success)) {
  103. $item->filter_type_str = '成功';
  104. } else {
  105. $item->filter_type_str = '失败';
  106. }
  107. }
  108. return $result;
  109. }
  110. /**
  111. * 补传
  112. * @param Request $request
  113. * @return string
  114. * @throws \Illuminate\Validation\ValidationException
  115. */
  116. public function callbackAgain(Request $request) {
  117. $this->validate($request, ['log_id' => 'required']);
  118. $logId = $request->integer('log_id');
  119. $record = DB::table('callback_report_charge_record')
  120. ->where('id', $logId)
  121. ->select('report_param', 'filter_type')
  122. ->first();
  123. if(!$record || !$record->report_param) {
  124. CommonBusinessException::throwError(Errors::CALLBACK_RECORD_NOT_EXISTS);
  125. }
  126. $requestInfo = \json_decode($record->report_param);
  127. if(!$requestInfo) {
  128. CommonBusinessException::throwError(Errors::CALLBACK_RECORD_LOG_ERROR);
  129. }
  130. $reportService = new TiktokEventReportService();
  131. if('roi_report_all' == $record->filter_type) {
  132. $result = $reportService->roiReportCharge($requestInfo);
  133. } else {
  134. $result = $reportService->reportCharge($requestInfo);
  135. }
  136. $reportSuccess = 0;
  137. if($result['result']) {
  138. $resultContent = \json_decode($result['content'], true);
  139. if(0 == $resultContent['code']) {
  140. $reportSuccess = 2;
  141. }
  142. }
  143. DB::table('callback_report_charge_record')
  144. ->where('id', $logId)
  145. ->update([
  146. 'report_result' => \json_encode($result),
  147. 'report_success' => $reportSuccess,
  148. 'updated_at' => date('Y-m-d H:i:s')
  149. ]);
  150. return 2 == $reportSuccess ? '补传成功' : '补传失败';
  151. }
  152. }