CallbackLogController.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  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. $miniprogramId = $request->input('miniprogram_id');
  27. $isExport = $request->input('is_export', false);
  28. $sql = DB::table('callback_report_charge_record')
  29. ->where([
  30. 'optimizer_uid' => $this->getLoginUserId()
  31. ])->when($advertiserId, function ($query, $advertiserId) {
  32. return $query->where('advertiser_id', $advertiserId);
  33. })->when($uid, function ($query, $uid) {
  34. return $query->where('uid', $uid);
  35. })->when($advPromotionId, function ($query, $advPromotionId){
  36. return $query->where('adv_promotion_id', $advPromotionId);
  37. })->when($userRanseStartAtBeginTime, function ($query, $userRanseStartAtBeginTime){
  38. return $query->where('user_ranse_start_at', '>=', $userRanseStartAtBeginTime);
  39. })->when($userRanseStartAtEndTime, function ($query, $userRanseStartAtEndTime){
  40. return $query->where('user_ranse_start_at', '<=', $userRanseStartAtEndTime);
  41. })->when($orderCreatedAtBeginTime, function ($query, $orderCreatedAtBeginTime){
  42. return $query->where('order_created_at', '>=', $orderCreatedAtBeginTime);
  43. })->when($miniprogramId, function ($query, $miniprogramId){
  44. return $query->where('miniprogram_id', $miniprogramId);
  45. })
  46. ->when($orderCreatedAtEndTime, function ($query, $orderCreatedAtEndTime) {
  47. return $query->where('order_created_at', '<=', $orderCreatedAtEndTime);
  48. })->orderBy('created_at', 'desc');
  49. if($isExport) {
  50. $result = $sql->get();
  51. } else {
  52. $result = $sql->paginate($request->integer('limit', 15));
  53. }
  54. $advertisers = DB::table('juliang_account_callback_config')
  55. ->where('company_uid', $this->getLoginUserId())
  56. ->select('adv_account_id', 'adv_account_name')
  57. ->get()->keyBy('adv_account_id');
  58. $reportSuccessStr = [
  59. 0 => '回传失败',
  60. 1 => '回传成功',
  61. 2 => '补传成功',
  62. ];
  63. foreach ($result as $item) {
  64. $item->advertiser_name = $advertisers->get($item->advertiser_id ?? -1)->adv_account_name ?? '';
  65. if('ok' == $item->filter_type ) {
  66. $item->filter_reason .= '-'. $reportSuccessStr[$item->report_success] ?? '';
  67. }
  68. if('ok' == $item->filter_type && (0 != $item->report_success)) {
  69. $item->filter_type_str = '成功';
  70. } else {
  71. $item->filter_type_str = '失败';
  72. }
  73. }
  74. return $result;
  75. }
  76. /**
  77. * 补传
  78. * @param Request $request
  79. * @return string
  80. * @throws \Illuminate\Validation\ValidationException
  81. */
  82. public function callbackAgain(Request $request) {
  83. $this->validate($request, ['log_id' => 'required']);
  84. $logId = $request->integer('log_id');
  85. $record = DB::table('callback_report_charge_record')
  86. ->where('id', $logId)
  87. ->select('report_param')
  88. ->first();
  89. if(!$record || !$record->report_param) {
  90. CommonBusinessException::throwError(Errors::CALLBACK_RECORD_NOT_EXISTS);
  91. }
  92. $requestInfo = \json_decode($record->report_param);
  93. if(!$requestInfo) {
  94. CommonBusinessException::throwError(Errors::CALLBACK_RECORD_LOG_ERROR);
  95. }
  96. $reportService = new TiktokEventReportService();
  97. $result = $reportService->reportCharge($requestInfo);
  98. $reportSuccess = 0;
  99. if($result['result']) {
  100. $resultContent = \json_decode($result['content'], true);
  101. if(0 == $resultContent['code']) {
  102. $reportSuccess = 2;
  103. }
  104. }
  105. DB::table('callback_report_charge_record')
  106. ->where('id', $logId)
  107. ->update([
  108. 'report_result' => \json_encode($result),
  109. 'report_success' => $reportSuccess,
  110. 'updated_at' => date('Y-m-d H:i:s')
  111. ]);
  112. return 2 == $reportSuccess ? '补传成功' : '补传失败';
  113. }
  114. }