| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 | <?phpnamespace App\Http\Controllers\Admin;use App\Http\Controllers\Controller;use App\Models\Marketing;use DB;use Exception;use GuzzleHttp\Client;use Illuminate\Http\JsonResponse;use Illuminate\Http\Request;use Log;use Response;use RuntimeException;/** * 促销控制器 * * Class MarketingController * * @package App\Http\Controllers\Controller */class MarketingController extends Controller {	// 邮件群发消息列表	public function emailList(Request $request): \Illuminate\Http\Response {		$status = $request->input('status');		$query = Marketing::whereType(1);		if(isset($status)){			$query->whereStatus($status);		}		$view['list'] = $query->paginate(15)->appends($request->except('page'));		return Response::view('admin.marketing.emailList', $view);	}	// 消息通道群发列表	public function pushList(Request $request): \Illuminate\Http\Response {		$status = $request->input('status');		$query = Marketing::whereType(2);		if(isset($status)){			$query->whereStatus($status);		}		$view['list'] = $query->paginate(15)->appends($request->except('page'));		return Response::view('admin.marketing.pushList', $view);	}	// 添加推送消息	public function addPushMarketing(Request $request): ?JsonResponse {		$title = $request->input('title');		$content = $request->input('content');		if(!sysConfig('is_push_bear')){			return Response::json(['status' => 'fail', 'message' => '推送失败:请先启用并配置PushBear']);		}		try{			DB::beginTransaction();			$response = (new Client())->get('https://pushbear.ftqq.com/sub', [				'query' => [					'sendkey' => sysConfig('push_bear_send_key'),					'text'    => $title,					'desp'    => $content				]			]);			$result = json_decode($response->getBody(), true);			if($result->code){ // 失败				$this->addMarketing(2, $title, $content, -1, $result->message);				throw new RuntimeException($result->message);			}			$this->addMarketing(2, $title, $content, 1);			DB::commit();			return Response::json(['status' => 'success', 'message' => '推送成功']);		}catch(Exception $e){			Log::error('PushBear消息推送失败:'.$e->getMessage());			DB::rollBack();			return Response::json(['status' => 'fail', 'message' => '推送失败:'.$e->getMessage()]);		}	}	private function addMarketing($type = 1, $title = '', $content = '', $status = 1, $error = '', $receiver = ''	): bool {		$marketing = new Marketing();		$marketing->type = $type;		$marketing->receiver = $receiver;		$marketing->title = $title;		$marketing->content = $content;		$marketing->error = $error;		$marketing->status = $status;		return $marketing->save();	}}
 |