diff --git a/app/Http/Controllers/Api/ProjectController.php b/app/Http/Controllers/Api/ProjectController.php index 33c259b45..5367280f0 100755 --- a/app/Http/Controllers/Api/ProjectController.php +++ b/app/Http/Controllers/Api/ProjectController.php @@ -1459,6 +1459,7 @@ class ProjectController extends AbstractController $data['new_column'] = $newColumn; } $task->pushMsg('add', $data); + $task->taskPush(null, 0); return Base::retSuccess('添加成功', $data); } diff --git a/app/Http/Controllers/Api/SystemController.php b/app/Http/Controllers/Api/SystemController.php index 81c6dd6d6..4ada62109 100755 --- a/app/Http/Controllers/Api/SystemController.php +++ b/app/Http/Controllers/Api/SystemController.php @@ -111,7 +111,7 @@ class SystemController extends AbstractController * * @apiParam {String} type * - get: 获取(默认) - * - save: 保存设置(参数:['smtp_server', 'port', 'account', 'password', 'reg_verify', 'notice', 'task_start_minute', 'task_remind_hours', 'task_remind_hours2', 'notice_msg', 'msg_unread_user_minute', 'msg_unread_group_minute', 'ignore_addr']) + * - save: 保存设置(参数:['smtp_server', 'port', 'account', 'password', 'reg_verify', 'notice_msg', 'msg_unread_user_minute', 'msg_unread_group_minute', 'ignore_addr']) * @apiSuccess {Number} ret 返回状态码(1正确、0错误) * @apiSuccess {String} msg 返回信息(错误描述) * @apiSuccess {Object} data 返回数据 @@ -134,10 +134,6 @@ class SystemController extends AbstractController 'account', 'password', 'reg_verify', - 'notice', - 'task_start_minute', - 'task_remind_hours', - 'task_remind_hours2', 'notice_msg', 'msg_unread_user_minute', 'msg_unread_group_minute', @@ -156,10 +152,6 @@ class SystemController extends AbstractController $setting['account'] = $setting['account'] ?: ''; $setting['password'] = $setting['password'] ?: ''; $setting['reg_verify'] = $setting['reg_verify'] ?: 'close'; - $setting['notice'] = $setting['notice'] ?: 'close'; - $setting['task_start_minute'] = intval($setting['task_start_minute'] ?? -1); - $setting['task_remind_hours'] = floatval($setting['task_remind_hours'] ?? -1); - $setting['task_remind_hours2'] = floatval($setting['task_remind_hours2'] ?? -1); $setting['notice_msg'] = $setting['notice_msg'] ?: 'close'; $setting['msg_unread_user_minute'] = intval($setting['msg_unread_user_minute'] ?? -1); $setting['msg_unread_group_minute'] = intval($setting['msg_unread_group_minute'] ?? -1); @@ -281,7 +273,7 @@ class SystemController extends AbstractController * * @apiParam {String} type * - get: 获取(默认) - * - save: 保存设置(参数:['push', 'ios_key', 'ios_secret', 'android_key', 'android_secret', 'push_msg', 'push_task', 'task_start_minute', 'task_remind_hours', 'task_remind_hours2']) + * - save: 保存设置(参数:['push', 'ios_key', 'ios_secret', 'android_key', 'android_secret']) * @apiSuccess {Number} ret 返回状态码(1正确、0错误) * @apiSuccess {String} msg 返回信息(错误描述) * @apiSuccess {Object} data 返回数据 @@ -303,11 +295,6 @@ class SystemController extends AbstractController 'ios_secret', 'android_key', 'android_secret', - 'push_msg', - 'push_task', - 'task_start_minute', - 'task_remind_hours', - 'task_remind_hours2' ])) { unset($all[$key]); } @@ -318,11 +305,6 @@ class SystemController extends AbstractController } // $setting['push'] = $setting['push'] ?: 'close'; - $setting['push_msg'] = $setting['push_msg'] ?: 'open'; - $setting['push_task'] = $setting['push_task'] ?: 'open'; - $setting['task_start_minute'] = intval($setting['task_start_minute']); - $setting['task_remind_hours'] = floatval($setting['task_remind_hours']); - $setting['task_remind_hours2'] = floatval($setting['task_remind_hours2']); // return Base::retSuccess('success', $setting ?: json_decode('{}')); } diff --git a/app/Models/ProjectTask.php b/app/Models/ProjectTask.php index 300806b24..557cadf97 100644 --- a/app/Models/ProjectTask.php +++ b/app/Models/ProjectTask.php @@ -655,7 +655,7 @@ class ProjectTask extends AbstractModel } // 负责人 if (Arr::exists($data, 'owner')) { - $count = $this->taskUser->where('owner', 1)->count(); + $older = $this->taskUser->where('owner', 1)->pluck('userid')->toArray(); $array = []; $owner = is_array($data['owner']) ? $data['owner'] : [$data['owner']]; if (count($owner) > 10) { @@ -679,11 +679,12 @@ class ProjectTask extends AbstractModel } } if ($array) { - if ($count == 0 && count($array) == 1 && $array[0] == User::userid()) { + if (count($older) == 0 && count($array) == 1 && $array[0] == User::userid()) { $this->addLog("认领{任务}"); } else { $this->addLog("修改{任务}负责人", ['userid' => $array]); } + $this->taskPush(array_values(array_diff($array, $older)), 0); } $rows = ProjectTaskUser::whereTaskId($this->id)->whereOwner(1)->whereNotIn('userid', $array)->get(); if ($rows->isNotEmpty()) { @@ -1431,6 +1432,55 @@ class ProjectTask extends AbstractModel } } + /** + * 任务提醒 + * @param $userids + * @param int $type 0-新任务、1-即将超时、2-已超时 + * @return void + */ + public function taskPush($userids, int $type) + { + if ($userids === null) { + $userids = $this->taskUser->where('owner', 1)->pluck('userid')->toArray(); + } + if (empty($userids)) { + return; + } + $users = User::whereIn('userid', $userids)->whereNull('disable_at')->get(); + if (empty($users)) { + return; + } + + $botUser = User::botGetOrCreate('task-alert'); + if (empty($botUser)) { + return; + } + + $text = view('push.task', [ + 'type' => str_replace([0, 1, 2], ['start', 'before', 'after'], $type), + 'task' => $this, + ])->render(); + + /** @var User $user */ + foreach ($users as $user) { + $data = [ + 'type' => $type, + 'userid' => $user->userid, + 'task_id' => $this->id, + ]; + $pushLog = ProjectTaskPushLog::where($data)->exists(); + if ($pushLog) { + continue; + } + // + $dialog = WebSocketDialog::checkUserDialog($botUser->userid, $data['userid']); + if ($dialog) { + ProjectTaskPushLog::createInstance($data)->save(); + WebSocketDialogMsg::sendMsg(null, $dialog->id, 'text', ['text' => $text], $botUser->userid); + } + } + } + /** * 获取任务 * @param $task_id diff --git a/app/Tasks/AppPushTask.php b/app/Tasks/AppPushTask.php index 86709c7dc..9efc4b2a8 100644 --- a/app/Tasks/AppPushTask.php +++ b/app/Tasks/AppPushTask.php @@ -3,10 +3,6 @@ namespace App\Tasks; use App\Models\ProjectTask; -use App\Models\ProjectTaskPushLog; -use App\Models\User; -use App\Models\WebSocketDialog; -use App\Models\WebSocketDialogMsg; use App\Module\Base; use Carbon\Carbon; @@ -22,105 +18,35 @@ class AppPushTask extends AbstractTask public function start() { $setting = Base::setting('appPushSetting'); - $pushTask = $setting['push'] === 'open' && $setting['push_task'] !== 'close'; - if (!$pushTask) { + if ($setting['push'] !== 'open') { return; } - $start = intval($setting['task_start_minute']); - $hours = floatval($setting['task_remind_hours']); - $hours2 = floatval($setting['task_remind_hours2']); - if ($start > -1) { - ProjectTask::whereNull("complete_at") - ->whereNull("archived_at") - ->whereBetween("start_at", [ - Carbon::now()->subMinutes($start + 10), - Carbon::now()->subMinutes($start) - ])->chunkById(100, function ($tasks) { - /** @var ProjectTask $task */ - foreach ($tasks as $task) { - $this->taskPush($task, 0); - } - }); - } - if ($hours > -1) { - ProjectTask::whereNull("complete_at") - ->whereNull("archived_at") - ->whereBetween("end_at", [ - Carbon::now()->addMinutes($hours * 60), - Carbon::now()->addMinutes($hours * 60 + 10) - ])->chunkById(100, function ($tasks) { - /** @var ProjectTask $task */ - foreach ($tasks as $task) { - $this->taskPush($task, 1); - } - }); - } - if ($hours2 > -1) { - ProjectTask::whereNull("complete_at") - ->whereNull("archived_at") - ->whereBetween("end_at", [ - Carbon::now()->subMinutes($hours2 * 60 + 10), - Carbon::now()->subMinutes($hours2 * 60) - ])->chunkById(100, function ($tasks) { - /** @var ProjectTask $task */ - foreach ($tasks as $task) { - $this->taskPush($task, 2); - } - }); - } + ProjectTask::whereNull("complete_at") + ->whereNull("archived_at") + ->whereBetween("end_at", [ + Carbon::now()->addMinutes(60), + Carbon::now()->addMinutes(60 + 10) + ])->chunkById(100, function ($tasks) { + /** @var ProjectTask $task */ + foreach ($tasks as $task) { + $task->taskPush(null, 1); + } + }); + ProjectTask::whereNull("complete_at") + ->whereNull("archived_at") + ->whereBetween("end_at", [ + Carbon::now()->subMinutes(60 + 10), + Carbon::now()->subMinutes(60) + ])->chunkById(100, function ($tasks) { + /** @var ProjectTask $task */ + foreach ($tasks as $task) { + $task->taskPush(null, 2); + } + }); } public function end() { } - - /** - * 任务过期前、超期后提醒 - * @param ProjectTask $task - * @param int $type - * @return void - */ - private function taskPush(ProjectTask $task, int $type) - { - $userids = $task->taskUser->where('owner', 1)->pluck('userid')->toArray(); - if (empty($userids)) { - return; - } - $users = User::whereIn('userid', $userids)->whereNull('disable_at')->get(); - if (empty($users)) { - return; - } - - $botUser = User::botGetOrCreate('task-alert'); - if (empty($botUser)) { - return; - } - - $setting = Base::setting('appPushSetting'); - $text = view('push.task', [ - 'type' => str_replace([0, 1, 2], ['start', 'before', 'after'], $type), - 'task' => $task, - 'setting' => $setting, - ])->render(); - - /** @var User $user */ - foreach ($users as $user) { - $data = [ - 'type' => $type, - 'userid' => $user->userid, - 'task_id' => $task->id, - ]; - $pushLog = ProjectTaskPushLog::where($data)->exists(); - if ($pushLog) { - continue; - } - // - $dialog = WebSocketDialog::checkUserDialog($botUser->userid, $data['userid']); - if ($dialog) { - ProjectTaskPushLog::createInstance($data)->save(); - WebSocketDialogMsg::sendMsg(null, $dialog->id, 'text', ['text' => $text], $botUser->userid); // todo 未能在任务end事件来发送任务 - } - } - } } diff --git a/app/Tasks/EmailNoticeTask.php b/app/Tasks/EmailNoticeTask.php index 0844627fc..78b6098f6 100644 --- a/app/Tasks/EmailNoticeTask.php +++ b/app/Tasks/EmailNoticeTask.php @@ -25,51 +25,6 @@ class EmailNoticeTask extends AbstractTask public function start() { $setting = Base::setting('emailSetting'); - // 任务通知 - if ($setting['notice'] === 'open') { - $start = intval($setting['task_start_minute']); - $hours = floatval($setting['task_remind_hours']); - $hours2 = floatval($setting['task_remind_hours2']); - if ($start > -1) { - ProjectTask::whereNull("complete_at") - ->whereNull("archived_at") - ->whereBetween("start_at", [ - Carbon::now()->subMinutes($start + 10), - Carbon::now()->subMinutes($start) - ])->chunkById(100, function ($tasks) { - /** @var ProjectTask $task */ - foreach ($tasks as $task) { - $this->taskEmail($task, 0); - } - }); - } - if ($hours > -1) { - ProjectTask::whereNull("complete_at") - ->whereNull("archived_at") - ->whereBetween("end_at", [ - Carbon::now()->addMinutes($hours * 60), - Carbon::now()->addMinutes($hours * 60 + 10) - ])->chunkById(100, function ($tasks) { - /** @var ProjectTask $task */ - foreach ($tasks as $task) { - $this->taskEmail($task, 1); - } - }); - } - if ($hours2 > -1) { - ProjectTask::whereNull("complete_at") - ->whereNull("archived_at") - ->whereBetween("end_at", [ - Carbon::now()->subMinutes($hours2 * 60 + 10), - Carbon::now()->subMinutes($hours2 * 60) - ])->chunkById(100, function ($tasks) { - /** @var ProjectTask $task */ - foreach ($tasks as $task) { - $this->taskEmail($task, 2); - } - }); - } - } // 消息通知 if ($setting['notice_msg'] === 'open') { $userMinute = intval($setting['msg_unread_user_minute']); @@ -114,70 +69,6 @@ class EmailNoticeTask extends AbstractTask } - /** - * 任务过期前、超期后提醒 - * @param ProjectTask $task - * @param int $type - * @return void - */ - private function taskEmail(ProjectTask $task, int $type) - { - $userids = $task->taskUser->where('owner', 1)->pluck('userid')->toArray(); - if (empty($userids)) { - return; - } - $users = User::whereIn('userid', $userids)->whereNull('disable_at')->get(); - if (empty($users)) { - return; - } - - $setting = Base::setting('emailSetting'); - - /** @var User $user */ - foreach ($users as $user) { - $data = [ - 'type' => $type, - 'userid' => $user->userid, - 'task_id' => $task->id, - ]; - $emailLog = ProjectTaskMailLog::where($data)->exists(); - if ($emailLog) { - continue; - } - try { - if (!Base::isEmail($user->email)) { - throw new \Exception("User email '{$user->email}' address error"); - } - $subject = match ($type) { - 1 => "任务提醒", - 2 => "任务过期提醒", - default => "任务开始提醒", - }; - $content = view('email.task', [ - 'type' => str_replace([0, 1, 2], ['start', 'before', 'after'], $type), - 'user' => $user, - 'task' => $task, - 'setting' => $setting, - ])->render(); - Setting::validateAddr($user->email, function($to) use ($content, $subject, $setting) { - Factory::mailer() - ->setDsn("smtp://{$setting['account']}:{$setting['password']}@{$setting['smtp_server']}:{$setting['port']}?verify_peer=0") - ->setMessage(EmailMessage::create() - ->from(env('APP_NAME', 'Task') . " <{$setting['account']}>") - ->to($to) - ->subject($subject) - ->html($content)) - ->send(); - }); - $data['is_send'] = 1; - } catch (\Throwable $e) { - $data['send_error'] = $e->getMessage(); - } - $data['email'] = $user->email; - ProjectTaskMailLog::createInstance($data)->save(); - } - } - /** * 未读消息通知 * @param $rows diff --git a/app/Tasks/WebSocketDialogMsgTask.php b/app/Tasks/WebSocketDialogMsgTask.php index 7e068b057..30d274571 100644 --- a/app/Tasks/WebSocketDialogMsgTask.php +++ b/app/Tasks/WebSocketDialogMsgTask.php @@ -5,7 +5,6 @@ namespace App\Tasks; @error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING); use App\Models\User; -use App\Models\UserBot; use App\Models\WebSocketDialog; use App\Models\WebSocketDialogMsg; use App\Models\WebSocketDialogMsgRead; @@ -164,8 +163,7 @@ class WebSocketDialogMsgTask extends AbstractTask // umeng推送app if ($umengUserid) { $setting = Base::setting('appPushSetting'); - $pushMsg = $setting['push'] === 'open' && $setting['push_msg'] !== 'close'; - if ($pushMsg) { + if ($setting['push'] === 'open') { $umengTitle = User::userid2nickname($msg->userid); if ($dialog->type == 'group') { $umengTitle = "{$dialog->getGroupName()} ($umengTitle)"; diff --git a/resources/assets/js/pages/manage/setting/components/SystemAppPush.vue b/resources/assets/js/pages/manage/setting/components/SystemAppPush.vue index 95653ff01..4a807b3a1 100644 --- a/resources/assets/js/pages/manage/setting/components/SystemAppPush.vue +++ b/resources/assets/js/pages/manage/setting/components/SystemAppPush.vue @@ -24,40 +24,6 @@ - {{$L('推送内容')}} - - - {{ $L('开启') }} - {{ $L('关闭') }} - - - - - {{ $L('开启') }} - {{ $L('关闭') }} - -
- -
- - -
-
- -
- - -
-
- -
- - -
-
-
{{$L('填写-1则不通知,误差±10分钟')}}
-
-
diff --git a/resources/assets/js/pages/manage/setting/components/SystemEmailSetting.vue b/resources/assets/js/pages/manage/setting/components/SystemEmailSetting.vue index bd74e06d8..12ef1d1a0 100644 --- a/resources/assets/js/pages/manage/setting/components/SystemEmailSetting.vue +++ b/resources/assets/js/pages/manage/setting/components/SystemEmailSetting.vue @@ -35,33 +35,6 @@ ② {{$L('修改邮箱和删除帐号需要邮箱验证码')}} - - - {{ $L('开启') }} - {{ $L('关闭') }} - -
- -
- - -
-
- -
- - -
-
- -
- - -
-
-
{{$L('填写-1则不通知,误差±10分钟')}}
-
-
{{ $L('开启') }} @@ -114,10 +87,6 @@ export default { account: '', password: '', reg_verify: 'colse', - notice: 'open', - task_start_minute: -1, - task_remind_hours: -1, - task_remind_hours2: -1, notice_msg: 'open', msg_unread_user_minute: -1, msg_unread_group_minute: -1, diff --git a/resources/views/email/task.blade.php b/resources/views/email/task.blade.php deleted file mode 100755 index ab030944d..000000000 --- a/resources/views/email/task.blade.php +++ /dev/null @@ -1,8 +0,0 @@ -

{{ $user->nickname }} 您好:

-@if ($type === 'before') -

您有一个任务【{{ $task->name }}】{{ $setting['task_remind_hours'] > 0 ? "还有{$setting['task_remind_hours']}小时即将超时" : "已超时" }},请及时处理。

-@elseif ($type === 'after') -

您的任务【{{ $task->name }}】已经超时{{ $setting['task_remind_hours2'] > 0 ? "{$setting['task_remind_hours2']}小时" : "" }},请及时处理。

-@else -

您有一个新任务【{{ $task->name }}】已开始。

-@endif diff --git a/resources/views/push/task.blade.php b/resources/views/push/task.blade.php index 33d695ea2..7dd4cb023 100755 --- a/resources/views/push/task.blade.php +++ b/resources/views/push/task.blade.php @@ -1,7 +1,7 @@ @if ($type === 'before') - 您有一个任务 #{{ $task->name }} {{ $setting['task_remind_hours'] > 0 ? "还有{$setting['task_remind_hours']}小时即将超时" : "已超时" }},请及时处理。 + 您的任务 #{{ $task->name }} 即将超时,请及时处理。 @elseif ($type === 'after') - 您的任务 #{{ $task->name }} 已经超时{{ $setting['task_remind_hours2'] > 0 ? "{$setting['task_remind_hours2']}小时" : "" }},请及时处理。 + 您的任务 #{{ $task->name }} 已经超时,请及时处理。 @else - 您有一个新任务 #{{ $task->name }} 已开始。 + 您有一个新任务 #{{ $task->name }}。 @endif