mirror of
https://github.com/kuaifan/dootask.git
synced 2026-03-17 19:23:26 +00:00
perf: 添加上班签到提醒消息
This commit is contained in:
parent
071ddfad0f
commit
111b5a777f
@ -224,7 +224,7 @@ class SystemController extends AbstractController
|
|||||||
*
|
*
|
||||||
* @apiParam {String} type
|
* @apiParam {String} type
|
||||||
* - get: 获取(默认)
|
* - get: 获取(默认)
|
||||||
* - save: 保存设置(参数:['open', 'time', 'advance', 'delay', 'edit', 'key'])
|
* - save: 保存设置(参数:['open', 'time', 'advance', 'delay', 'remindin', 'remindexceed', 'edit', 'key'])
|
||||||
* @apiSuccess {Number} ret 返回状态码(1正确、0错误)
|
* @apiSuccess {Number} ret 返回状态码(1正确、0错误)
|
||||||
* @apiSuccess {String} msg 返回信息(错误描述)
|
* @apiSuccess {String} msg 返回信息(错误描述)
|
||||||
* @apiSuccess {Object} data 返回数据
|
* @apiSuccess {Object} data 返回数据
|
||||||
@ -245,6 +245,8 @@ class SystemController extends AbstractController
|
|||||||
'time',
|
'time',
|
||||||
'advance',
|
'advance',
|
||||||
'delay',
|
'delay',
|
||||||
|
'remindin',
|
||||||
|
'remindexceed',
|
||||||
'edit',
|
'edit',
|
||||||
'key',
|
'key',
|
||||||
])) {
|
])) {
|
||||||
@ -268,6 +270,8 @@ class SystemController extends AbstractController
|
|||||||
$setting['time'] = $setting['time'] ? Base::json2array($setting['time']) : ['00:00', '23:59'];
|
$setting['time'] = $setting['time'] ? Base::json2array($setting['time']) : ['00:00', '23:59'];
|
||||||
$setting['advance'] = intval($setting['advance']) ?: 120;
|
$setting['advance'] = intval($setting['advance']) ?: 120;
|
||||||
$setting['delay'] = intval($setting['delay']) ?: 120;
|
$setting['delay'] = intval($setting['delay']) ?: 120;
|
||||||
|
$setting['remindin'] = intval($setting['remindin']) ?: 5;
|
||||||
|
$setting['remindexceed'] = intval($setting['remindexceed']) ?: 10;
|
||||||
$setting['edit'] = $setting['edit'] ?: 'close';
|
$setting['edit'] = $setting['edit'] ?: 'close';
|
||||||
$setting['cmd'] = "curl -sSL '" . Base::fillUrl("api/public/checkin/install?key={$setting['key']}") . "' | sh";
|
$setting['cmd'] = "curl -sSL '" . Base::fillUrl("api/public/checkin/install?key={$setting['key']}") . "' | sh";
|
||||||
//
|
//
|
||||||
|
|||||||
@ -8,6 +8,7 @@ use App\Module\Ihttp;
|
|||||||
use App\Module\RandomColor;
|
use App\Module\RandomColor;
|
||||||
use App\Tasks\AppPushTask;
|
use App\Tasks\AppPushTask;
|
||||||
use App\Tasks\AutoArchivedTask;
|
use App\Tasks\AutoArchivedTask;
|
||||||
|
use App\Tasks\CheckinRemindTask;
|
||||||
use App\Tasks\DeleteBotMsgTask;
|
use App\Tasks\DeleteBotMsgTask;
|
||||||
use App\Tasks\DeleteTmpTask;
|
use App\Tasks\DeleteTmpTask;
|
||||||
use App\Tasks\EmailNoticeTask;
|
use App\Tasks\EmailNoticeTask;
|
||||||
@ -194,6 +195,8 @@ class IndexController extends InvokeController
|
|||||||
Task::deliver(new DeleteBotMsgTask());
|
Task::deliver(new DeleteBotMsgTask());
|
||||||
// 周期任务
|
// 周期任务
|
||||||
Task::deliver(new LoopTask());
|
Task::deliver(new LoopTask());
|
||||||
|
// 签到提醒
|
||||||
|
Task::deliver(new CheckinRemindTask());
|
||||||
// 获取笑话/心灵鸡汤
|
// 获取笑话/心灵鸡汤
|
||||||
Task::deliver(new JokeSoupTask());
|
Task::deliver(new JokeSoupTask());
|
||||||
|
|
||||||
|
|||||||
90
app/Tasks/CheckinRemindTask.php
Normal file
90
app/Tasks/CheckinRemindTask.php
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Tasks;
|
||||||
|
|
||||||
|
use App\Models\User;
|
||||||
|
use App\Models\UserCheckinRecord;
|
||||||
|
use App\Models\WebSocketDialog;
|
||||||
|
use App\Models\WebSocketDialogMsg;
|
||||||
|
use App\Module\Base;
|
||||||
|
use Cache;
|
||||||
|
use Carbon\Carbon;
|
||||||
|
|
||||||
|
@error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING);
|
||||||
|
|
||||||
|
class CheckinRemindTask extends AbstractTask
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function start()
|
||||||
|
{
|
||||||
|
$setting = Base::setting('checkinSetting');
|
||||||
|
if ($setting['open'] !== 'open') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//
|
||||||
|
$times = $setting['time'] ? Base::json2array($setting['time']) : ['00:00', '23:59'];
|
||||||
|
$remindin = (intval($setting['remindin']) ?: 5) * 60;
|
||||||
|
$remindexceed = (intval($setting['remindexceed']) ?: 10) * 60;
|
||||||
|
//
|
||||||
|
$nowDate = date("Y-m-d");
|
||||||
|
$timeStart = strtotime("{$nowDate} {$times[0]}");
|
||||||
|
//
|
||||||
|
if ($remindin > 0) {
|
||||||
|
$timeRemindin = $timeStart - $remindin;
|
||||||
|
if ($timeRemindin <= Base::time() && Base::time() <= $timeStart) {
|
||||||
|
// 签到打卡提醒
|
||||||
|
$this->remind('in');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($remindexceed > 0) {
|
||||||
|
$timeRemindexceed = $timeStart + $remindexceed;
|
||||||
|
if ($timeRemindexceed <= Base::time() && Base::time() <= $timeRemindexceed + 300) {
|
||||||
|
// 签到缺卡提醒
|
||||||
|
$this->remind('exceed');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function end()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private function remind($type)
|
||||||
|
{
|
||||||
|
if (Cache::get("CheckinRemindTask:remind-" . $type) == date("Ymd")) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Cache::put("CheckinRemindTask:remind-" . $type, date("Ymd"), Carbon::now()->addDay());
|
||||||
|
//
|
||||||
|
$botUser = User::botGetOrCreate('check-in');
|
||||||
|
if (!$botUser) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 提醒对象:在职、7天内有过签到数据
|
||||||
|
User::whereNull('disable_at')->chunk(100, function ($users) use ($type, $botUser) {
|
||||||
|
/** @var User $user */
|
||||||
|
foreach ($users as $user) {
|
||||||
|
if (UserCheckinRecord::whereUserid($user->userid)->whereDate(date("Y-m-d"))->exists()) {
|
||||||
|
continue; // 已打卡
|
||||||
|
}
|
||||||
|
if (!UserCheckinRecord::whereUserid($user->userid)->where('created_at', '>', Carbon::now()->subDays(3))->exists()) {
|
||||||
|
continue; // 3天内没有打卡
|
||||||
|
}
|
||||||
|
$dialog = WebSocketDialog::checkUserDialog($botUser, $user->userid);
|
||||||
|
if ($dialog) {
|
||||||
|
if ($type === 'exceed') {
|
||||||
|
$text = "<p><strong style='color:red'>缺卡提醒:</strong>上班时间到了,你还没有打卡哦~</p>";
|
||||||
|
} else {
|
||||||
|
$text = "<p><strong>打卡提醒:</strong>快到上班时间了,别忘了打卡哦~</p>";
|
||||||
|
}
|
||||||
|
WebSocketDialogMsg::sendMsg(null, $dialog->id, 'text', ['text' => $text], $botUser->userid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -33,8 +33,21 @@
|
|||||||
<label>{{ $L('分钟') }}</label>
|
<label>{{ $L('分钟') }}</label>
|
||||||
</div>
|
</div>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
</Form>
|
|
||||||
<div class="form-tip">{{$L('签到前后时间收到消息通知')}}</div>
|
<div class="form-tip">{{$L('签到前后时间收到消息通知')}}</div>
|
||||||
|
<FormItem :label="$L('签到打卡提醒')" prop="remindin">
|
||||||
|
<div class="input-number-box">
|
||||||
|
<InputNumber v-model="formData.remindin" :min="0" :step="1"/>
|
||||||
|
<label>{{ $L('分钟') }}</label>
|
||||||
|
</div>
|
||||||
|
</FormItem>
|
||||||
|
<FormItem :label="$L('签到缺卡提醒')" prop="remindexceed">
|
||||||
|
<div class="input-number-box">
|
||||||
|
<InputNumber v-model="formData.remindexceed" :min="0" :step="1"/>
|
||||||
|
<label>{{ $L('分钟') }}</label>
|
||||||
|
</div>
|
||||||
|
</FormItem>
|
||||||
|
<div class="form-tip">{{$L('签到提醒对象:在职且3天内有签到过的成员')}}</div>
|
||||||
|
</Form>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
<FormItem :label="$L('允许修改')" prop="edit">
|
<FormItem :label="$L('允许修改')" prop="edit">
|
||||||
<RadioGroup v-model="formData.edit">
|
<RadioGroup v-model="formData.edit">
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user