From 9562a05520996cd36f32c78e376f010ad5d8fd44 Mon Sep 17 00:00:00 2001 From: "iVampireSP.com" Date: Sun, 6 Nov 2022 23:18:46 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Notifications/ModuleEarnings.php | 66 ++++++++++++ app/Notifications/UserBalanceNotification.php | 69 ++++++++++++ app/Notifications/WeComRobotChannel.php | 41 +++++++ app/Notifications/WorkOrderNotification.php | 102 ++++++++++++++++++ app/Observers/BalanceObserve.php | 68 ++++++++++++ app/Observers/WorkOrder/ReplyObserver.php | 66 ++++++++++++ app/Observers/WorkOrder/WorkOrderObserver.php | 71 ++++++++++++ app/Providers/EventServiceProvider.php | 4 + 8 files changed, 487 insertions(+) create mode 100644 app/Notifications/ModuleEarnings.php create mode 100644 app/Notifications/UserBalanceNotification.php create mode 100644 app/Notifications/WeComRobotChannel.php create mode 100644 app/Notifications/WorkOrderNotification.php create mode 100644 app/Observers/BalanceObserve.php create mode 100644 app/Observers/WorkOrder/ReplyObserver.php create mode 100644 app/Observers/WorkOrder/WorkOrderObserver.php diff --git a/app/Notifications/ModuleEarnings.php b/app/Notifications/ModuleEarnings.php new file mode 100644 index 0000000..9d2da7c --- /dev/null +++ b/app/Notifications/ModuleEarnings.php @@ -0,0 +1,66 @@ +module = $module; + } + + /** + * Get the mail representation of the notification. + * + * @param mixed $notifiable + * @return \Illuminate\Notifications\Messages\MailMessage + */ + public function toGroup($notifiable) + { + if (!isset($notifiable['transactions'])) { + return; + } + + $module = $this->module; + + $view = 'notifications.module.earnings'; + + // make wecom_key visible + $wecom_key = $module->wecom_key ?? config('settings.wecom.robot_hook.billing'); + + $resp = Http::post('https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=' . $wecom_key, [ + 'msgtype' => 'markdown', + 'markdown' => [ + 'content' => view($view, [ + 'module' => $module, + 'data' => $notifiable, + ])->render(), + ], + ]); + + if ($resp->failed()) { + Log::error('发送模块盈利到企业微信时失败', [ + 'module' => $module->id, + 'data' => $notifiable, + 'resp' => $resp->json(), + ]); + } + } +} diff --git a/app/Notifications/UserBalanceNotification.php b/app/Notifications/UserBalanceNotification.php new file mode 100644 index 0000000..6898445 --- /dev/null +++ b/app/Notifications/UserBalanceNotification.php @@ -0,0 +1,69 @@ +paid_at !== null) { + $view = 'notifications.user.balance'; + $notifiable->load('user'); + $user = $notifiable->user; + + + $wecom_key = config('settings.wecom.robot_hook.billing'); + + + $data = [ + 'balance' => $notifiable, + 'user' => $user, + ]; + + $resp = Http::post('https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=' . $wecom_key, [ + 'msgtype' => 'markdown', + 'markdown' => [ + 'content' => view($view, $data)->render(), + ], + ]); + + if (!$resp->successful()) { + Log::error('企业微信机器人发送失败', $data); + } + } + } + } +} diff --git a/app/Notifications/WeComRobotChannel.php b/app/Notifications/WeComRobotChannel.php new file mode 100644 index 0000000..ea8cd9e --- /dev/null +++ b/app/Notifications/WeComRobotChannel.php @@ -0,0 +1,41 @@ +toSms($notifiable); + + // Now we hopefully have a instance of a SmsMessage. + // That we are ready to send to our user. + // Let's do it :-) + $message->send(); + + // Or use dryRun() for testing to send it, without sending it for real. + $message->dryRun()->send(); + + // Wait.. was that it? + // Well sort of.. :-) + // But we need to implement this magical SmsMessage class for it to work. + + } +} diff --git a/app/Notifications/WorkOrderNotification.php b/app/Notifications/WorkOrderNotification.php new file mode 100644 index 0000000..fc8a9b8 --- /dev/null +++ b/app/Notifications/WorkOrderNotification.php @@ -0,0 +1,102 @@ +load(['module', 'user']); + + $module = $workOrder->module; + } elseif ($notifiable instanceof Reply) { + + $view = 'notifications.work_order.reply'; + + + $workOrder->load(['workOrder', 'user']); + $workOrder->workOrder->load('module'); + + $reply = $workOrder; + $workOrder = $workOrder->workOrder; + + $module = $workOrder->module; + } else { + return; + } + + // 取消隐藏字段 + $module->makeVisible(['wecom_key']); + + if ($module->wecom_key == null) { + $wecom_key = config('settings.wecom.robot_hook.default'); + } else { + $wecom_key = $module->wecom_key; + } + + // 隐藏字段 + $module->makeHidden(['wecom_key']); + + + $resp = Http::post('https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=' . $wecom_key, [ + 'msgtype' => 'markdown', + 'markdown' => [ + 'content' => view($view, [ + 'workOrder' => $workOrder, + 'user' => $workOrder->user, + 'reply' => $reply, + 'module' => $module, + ])->render(), + ], + ]); + + if (!$resp->successful()) { + Log::error('企业微信机器人发送失败', [ + 'resp' => $resp->json(), + 'workOrder' => $workOrder, + 'reply' => $reply, + 'module' => $module, + ]); + } + } +} diff --git a/app/Observers/BalanceObserve.php b/app/Observers/BalanceObserve.php new file mode 100644 index 0000000..5871020 --- /dev/null +++ b/app/Observers/BalanceObserve.php @@ -0,0 +1,68 @@ +toGroup($balance); + } + + /** + * Handle the Balance "updated" event. + * + * @param \App\Models\User\Balance $balance + * @return void + */ + public function updated(Balance $balance) + { + // + return (new UserBalanceNotification()) + ->toGroup($balance); + } + + /** + * Handle the Balance "deleted" event. + * + * @param \App\Models\User\Balance $balance + * @return void + */ + public function deleted(Balance $balance) + { + // + } + + /** + * Handle the Balance "restored" event. + * + * @param \App\Models\User\Balance $balance + * @return void + */ + public function restored(Balance $balance) + { + // + } + + /** + * Handle the Balance "force deleted" event. + * + * @param \App\Models\User\Balance $balance + * @return void + */ + public function forceDeleted(Balance $balance) + { + // + } +} diff --git a/app/Observers/WorkOrder/ReplyObserver.php b/app/Observers/WorkOrder/ReplyObserver.php new file mode 100644 index 0000000..ffbd8b7 --- /dev/null +++ b/app/Observers/WorkOrder/ReplyObserver.php @@ -0,0 +1,66 @@ +toGroup($reply); + } + + /** + * Handle the Reply "updated" event. + * + * @param \App\Models\WorkOrder\Reply $reply + * @return void + */ + public function updated(Reply $reply) + { + // + } + + /** + * Handle the Reply "deleted" event. + * + * @param \App\Models\WorkOrder\Reply $reply + * @return void + */ + public function deleted(Reply $reply) + { + // + } + + /** + * Handle the Reply "restored" event. + * + * @param \App\Models\WorkOrder\Reply $reply + * @return void + */ + public function restored(Reply $reply) + { + // + } + + /** + * Handle the Reply "force deleted" event. + * + * @param \App\Models\WorkOrder\Reply $reply + * @return void + */ + public function forceDeleted(Reply $reply) + { + // + } +} diff --git a/app/Observers/WorkOrder/WorkOrderObserver.php b/app/Observers/WorkOrder/WorkOrderObserver.php new file mode 100644 index 0000000..7cfd9ff --- /dev/null +++ b/app/Observers/WorkOrder/WorkOrderObserver.php @@ -0,0 +1,71 @@ +toGroup($workOrder); + } + + /** + * Handle the WorkOrder "updated" event. + * + * @param \App\Models\WorkOrder\WorkOrder $workOrder + * @return void + */ + public function updated(WorkOrder $workOrder) + { + + Log::debug('workOrder updated', ['workOrder' => $workOrder]); + // + return (new WorkOrderNotification()) + ->toGroup($workOrder); + } + + /** + * Handle the WorkOrder "deleted" event. + * + * @param \App\Models\WorkOrder\WorkOrder $workOrder + * @return void + */ + public function deleted(WorkOrder $workOrder) + { + // + } + + /** + * Handle the WorkOrder "restored" event. + * + * @param \App\Models\WorkOrder\WorkOrder $workOrder + * @return void + */ + public function restored(WorkOrder $workOrder) + { + // + } + + /** + * Handle the WorkOrder "force deleted" event. + * + * @param \App\Models\WorkOrder\WorkOrder $workOrder + * @return void + */ + public function forceDeleted(WorkOrder $workOrder) + { + // + } +} diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index 474b6c1..b8850e5 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -27,6 +27,10 @@ class EventServiceProvider extends ServiceProvider public function boot() { // + + \App\Models\WorkOrder\WorkOrder::observe(\App\Observers\WorkOrder\WorkOrderObserver::class); + \App\Models\WorkOrder\Reply::observe(\App\Observers\WorkOrder\ReplyObserver::class); + \App\Models\Balance::observe(\App\Observers\BalanceObserve::class); } /**