MarketingController.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  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 Http;
  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. class MarketingController extends Controller
  19. {
  20. // 邮件群发消息列表
  21. public function emailList(Request $request)
  22. {
  23. $status = $request->input('status');
  24. $query = Marketing::whereType(1);
  25. if (isset($status)) {
  26. $query->whereStatus($status);
  27. }
  28. return view('admin.marketing.emailList', ['emails' => $query->paginate(15)->appends($request->except('page'))]);
  29. }
  30. // 消息通道群发列表
  31. public function pushList(Request $request)
  32. {
  33. $status = $request->input('status');
  34. $query = Marketing::whereType(2);
  35. if (isset($status)) {
  36. $query->whereStatus($status);
  37. }
  38. return view('admin.marketing.pushList', ['pushes' => $query->paginate(15)->appends($request->except('page'))]);
  39. }
  40. // 添加推送消息
  41. public function addPushMarketing(Request $request): ?JsonResponse
  42. {
  43. $title = $request->input('title');
  44. $content = $request->input('content');
  45. if (! sysConfig('is_push_bear')) {
  46. return Response::json(['status' => 'fail', 'message' => '推送失败:请先启用并配置PushBear']);
  47. }
  48. try {
  49. DB::beginTransaction();
  50. $response = Http::timeout(15)->get('https://pushbear.ftqq.com/sub', [
  51. 'sendkey' => sysConfig('push_bear_send_key'),
  52. 'text' => $title,
  53. 'desp' => $content,
  54. ]);
  55. $message = $response->json();
  56. if (! $message || ! $message['code'] === 0 || $response->failed()) { // 失败
  57. $this->addMarketing(2, $title, $content, -1, $message['message']);
  58. throw new RuntimeException($message['message']);
  59. }
  60. $this->addMarketing(2, $title, $content, 1);
  61. DB::commit();
  62. return Response::json(['status' => 'success', 'message' => '推送成功']);
  63. } catch (Exception $e) {
  64. Log::error('PushBear消息推送失败:'.$e->getMessage());
  65. DB::rollBack();
  66. return Response::json(['status' => 'fail', 'message' => '推送失败:'.$e->getMessage()]);
  67. }
  68. }
  69. private function addMarketing($type = 1, $title = '', $content = '', $status = 1, $error = '', $receiver = ''): bool
  70. {
  71. $marketing = new Marketing();
  72. $marketing->type = $type;
  73. $marketing->receiver = $receiver;
  74. $marketing->title = $title;
  75. $marketing->content = $content;
  76. $marketing->error = $error;
  77. $marketing->status = $status;
  78. return $marketing->save();
  79. }
  80. }