MarketingController.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. <?php
  2. namespace App\Http\Controllers\Admin;
  3. use App\Http\Controllers\Controller;
  4. use App\Models\Marketing;
  5. use DB;
  6. use Exception;
  7. use GuzzleHttp\Client;
  8. use Illuminate\Http\JsonResponse;
  9. use Illuminate\Http\Request;
  10. use Log;
  11. use Response;
  12. use RuntimeException;
  13. /**
  14. * 促销控制器
  15. *
  16. * Class MarketingController
  17. *
  18. * @package App\Http\Controllers\Controller
  19. */
  20. class MarketingController extends Controller
  21. {
  22. // 邮件群发消息列表
  23. public function emailList(Request $request)
  24. {
  25. $status = $request->input('status');
  26. $query = Marketing::whereType(1);
  27. if (isset($status)) {
  28. $query->whereStatus($status);
  29. }
  30. $view['list'] = $query->paginate(15)->appends($request->except('page'));
  31. return view('admin.marketing.emailList', $view);
  32. }
  33. // 消息通道群发列表
  34. public function pushList(Request $request)
  35. {
  36. $status = $request->input('status');
  37. $query = Marketing::whereType(2);
  38. if (isset($status)) {
  39. $query->whereStatus($status);
  40. }
  41. $view['list'] = $query->paginate(15)->appends($request->except('page'));
  42. return view('admin.marketing.pushList', $view);
  43. }
  44. // 添加推送消息
  45. public function addPushMarketing(Request $request): ?JsonResponse
  46. {
  47. $title = $request->input('title');
  48. $content = $request->input('content');
  49. if ( ! sysConfig('is_push_bear')) {
  50. return Response::json(
  51. ['status' => 'fail', 'message' => '推送失败:请先启用并配置PushBear']
  52. );
  53. }
  54. try {
  55. DB::beginTransaction();
  56. $response = (new Client())->get(
  57. 'https://pushbear.ftqq.com/sub',
  58. [
  59. 'query' => [
  60. 'sendkey' => sysConfig('push_bear_send_key'),
  61. 'text' => $title,
  62. 'desp' => $content,
  63. ],
  64. ]
  65. );
  66. $result = json_decode($response->getBody(), true);
  67. if ($result->code) { // 失败
  68. $this->addMarketing(2, $title, $content, -1, $result->message);
  69. throw new RuntimeException($result->message);
  70. }
  71. $this->addMarketing(2, $title, $content, 1);
  72. DB::commit();
  73. return Response::json(['status' => 'success', 'message' => '推送成功']);
  74. } catch (Exception $e) {
  75. Log::error('PushBear消息推送失败:' . $e->getMessage());
  76. DB::rollBack();
  77. return Response::json(
  78. ['status' => 'fail', 'message' => '推送失败:' . $e->getMessage()]
  79. );
  80. }
  81. }
  82. private function addMarketing(
  83. $type = 1,
  84. $title = '',
  85. $content = '',
  86. $status = 1,
  87. $error = '',
  88. $receiver = ''
  89. ): bool {
  90. $marketing = new Marketing();
  91. $marketing->type = $type;
  92. $marketing->receiver = $receiver;
  93. $marketing->title = $title;
  94. $marketing->content = $content;
  95. $marketing->error = $error;
  96. $marketing->status = $status;
  97. return $marketing->save();
  98. }
  99. }