MarketingController.php 2.6 KB

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