CallbackLogController.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  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\TiktokEventReportService;
  8. use Modules\Common\Errors\Errors;
  9. use Modules\Common\Exceptions\CommonBusinessException;
  10. class CallbackLogController extends CatchController
  11. {
  12. use ValidatesRequests;
  13. /**
  14. * 回传日志列表
  15. * @param Request $request
  16. * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator|\Illuminate\Support\Collection
  17. */
  18. public function list(Request $request) {
  19. $advertiserId = $request->input('advertiser_id');
  20. $uid = $request->input('uid');
  21. $advPromotionId = $request->input('adv_promotion_id');
  22. $userRanseStartAtBeginTime = $request->input('user_ranse_start_at_begin_time');
  23. $userRanseStartAtEndTime = $request->input('user_ranse_start_at_end_time');
  24. $orderCreatedAtBeginTime = $request->input('order_created_at_begin_time');
  25. $orderCreatedAtEndTime = $request->input('order_created_at_end_time');
  26. $isExport = $request->input('is_export', false);
  27. $sql = DB::table('callback_report_charge_record')
  28. ->where([
  29. 'optimizer_uid' => $this->getLoginUserId()
  30. ])->when($advertiserId, function ($query, $advertiserId) {
  31. return $query->where('advertiser_id', $advertiserId);
  32. })->when($uid, function ($query, $uid) {
  33. return $query->where('uid', $uid);
  34. })->when($advPromotionId, function ($query, $advPromotionId){
  35. return $query->where('adv_promotion_id', $advPromotionId);
  36. })->when($userRanseStartAtBeginTime, function ($query, $userRanseStartAtBeginTime){
  37. return $query->where('user_ranse_start_at', '>=', $userRanseStartAtBeginTime);
  38. })->when($userRanseStartAtEndTime, function ($query, $userRanseStartAtEndTime){
  39. return $query->where('user_ranse_start_at', '<=', $userRanseStartAtEndTime);
  40. })->when($orderCreatedAtBeginTime, function ($query, $orderCreatedAtBeginTime){
  41. return $query->where('order_created_at', '>=', $orderCreatedAtBeginTime);
  42. })->when($orderCreatedAtEndTime, function ($query, $orderCreatedAtEndTime) {
  43. return $query->where('order_created_at', '<=', $orderCreatedAtEndTime);
  44. })->orderBy('created_at', 'desc');
  45. if($isExport) {
  46. $result = $sql->get();
  47. } else {
  48. $result = $sql->paginate($request->integer('limit', 15));
  49. }
  50. $advertisers = DB::table('juliang_account_callback_config')
  51. ->where('company_uid', $this->getLoginUserId())
  52. ->select('adv_account_id', 'adv_account_name')
  53. ->get()->keyBy('adv_account_id');
  54. $reportSuccessStr = [
  55. 0 => '回传失败',
  56. 1 => '回传成功',
  57. 2 => '补传成功',
  58. ];
  59. foreach ($result as $item) {
  60. $item->advertiser_name = $advertisers->get($item->advertiser_id ?? -1)->adv_account_name ?? '';
  61. if('ok' == $item->filter_type ) {
  62. $item->filter_reason .= '-'. $reportSuccessStr[$item->report_success] ?? '';
  63. }
  64. }
  65. return $result;
  66. }
  67. /**
  68. * 补传
  69. * @param Request $request
  70. * @return string
  71. * @throws \Illuminate\Validation\ValidationException
  72. */
  73. public function callbackAgain(Request $request) {
  74. $this->validate($request, ['log_id' => 'required']);
  75. $logId = $request->integer('log_id');
  76. $record = DB::table('callback_report_charge_record')
  77. ->where('id', $logId)
  78. ->select('report_param')
  79. ->first();
  80. if(!$record || !$record->report_param) {
  81. CommonBusinessException::throwError(Errors::CALLBACK_RECORD_NOT_EXISTS);
  82. }
  83. $requestInfo = \json_decode($record->report_param);
  84. if(!$requestInfo) {
  85. CommonBusinessException::throwError(Errors::CALLBACK_RECORD_LOG_ERROR);
  86. }
  87. $reportService = new TiktokEventReportService();
  88. $result = $reportService->reportCharge($requestInfo);
  89. $reportSuccess = 0;
  90. if($result['result']) {
  91. $resultContent = \json_decode($result['content'], true);
  92. if(0 == $resultContent['code']) {
  93. $reportSuccess = 2;
  94. }
  95. }
  96. DB::table('callback_report_charge_record')
  97. ->where('id', $logId)
  98. ->update([
  99. 'report_result' => \json_encode($result),
  100. 'report_success' => $reportSuccess,
  101. 'updated_at' => date('Y-m-d H:i:s')
  102. ]);
  103. return 2 == $reportSuccess ? '补传成功' : '补传失败';
  104. }
  105. }