perf: 签到成功通知

This commit is contained in:
kuaifan 2023-01-28 22:44:52 +08:00
parent 3b346046ae
commit 10936bcdb5
5 changed files with 67 additions and 11 deletions

View File

@ -2,8 +2,11 @@
namespace App\Http\Controllers\Api;
use App\Models\User;
use App\Models\UserCheckinMac;
use App\Models\UserCheckinRecord;
use App\Models\WebSocketDialog;
use App\Models\WebSocketDialogMsg;
use App\Module\Base;
use Request;
@ -87,10 +90,19 @@ class PublicController extends AbstractController
if ($key != $setting['key']) {
return 'key error';
}
$setting['time'] = $setting['time'] ? Base::json2array($setting['time']) : ['00:00', '23:59'];
//
$nowDate = date("Y-m-d");
$nowTime = date("H:i:s");
//
$timeStart = strtotime(date("{$nowDate} {$setting['time'][0]}"));
$timeEnd = strtotime(date("{$nowDate} {$setting['time'][1]}"));
if (Base::time() < $timeStart || Base::time() > $timeEnd) {
return "not in valid time, valid time is {$setting['time'][0]}-{$setting['time'][1]}";
}
//
$macs = explode(",", $mac);
$creates = [];
foreach ($macs as $mac) {
$mac = strtoupper($mac);
if (Base::isMac($mac) && $UserCheckinMac = UserCheckinMac::whereMac($mac)->first()) {
@ -102,11 +114,25 @@ class PublicController extends AbstractController
$record = UserCheckinRecord::where($array)->first();
if (empty($record)) {
$record = UserCheckinRecord::createInstance($array);
$record->save();
$creates[] = $UserCheckinMac->userid;
}
$record->times = Base::array2json(array_merge($record->times, [$nowTime]));
$record->report_time = $time;
$record->save();
}
}
//
if ($creates) {
$botUser = User::botGetOrCreate('check-in');
if ($botUser) {
foreach ($creates as $create) {
$dialog = WebSocketDialog::checkUserDialog($botUser->userid, $create);
if ($dialog) {
$text = "签到成功,签到时间:" . date("H:i");
WebSocketDialogMsg::sendMsg(null, $dialog->id, 'text', ['text' => $text], $botUser->userid); // todo 未能在任务end事件来发送任务
}
}
}
}
return 'success';

View File

@ -224,7 +224,7 @@ class SystemController extends AbstractController
*
* @apiParam {String} type
* - get: 获取(默认)
* - save: 保存设置(参数:['open', 'edit', 'key']
* - save: 保存设置(参数:['open', 'time', 'notice', 'edit', 'key']
* @apiSuccess {Number} ret 返回状态码1正确、0错误
* @apiSuccess {String} msg 返回信息(错误描述)
* @apiSuccess {Object} data 返回数据
@ -242,6 +242,8 @@ class SystemController extends AbstractController
foreach ($all as $key => $value) {
if (!in_array($key, [
'open',
'time',
'notice',
'edit',
'key',
])) {
@ -262,6 +264,8 @@ class SystemController extends AbstractController
}
//
$setting['open'] = $setting['open'] ?: 'close';
$setting['time'] = $setting['time'] ? Base::json2array($setting['time']) : ['00:00', '23:59'];
$setting['notice'] = $setting['notice'] ?: 'close';
$setting['edit'] = $setting['edit'] ?: 'close';
$setting['cmd'] = "curl -sSL '" . Base::fillUrl("api/public/checkin/install?key={$setting['key']}") . "' | sh";
//

View File

@ -553,6 +553,8 @@ class User extends AbstractModel
return url("images/avatar/default_system.png");
} elseif ($email == 'task-alert@bot.system') {
return url("images/avatar/default_task.png");
} elseif ($email == 'check-in@bot.system') {
return url("images/avatar/default_checkin.png");
} elseif ($email == 'bot-manager@bot.system') {
return url("images/avatar/default_bot.png");
}
@ -628,6 +630,8 @@ class User extends AbstractModel
$update['nickname'] = '系统消息';
} elseif ($key === 'task-alert') {
$update['nickname'] = '任务提醒';
} elseif ($key === 'check-in') {
$update['nickname'] = '签到打卡';
} elseif ($key === 'bot-manager') {
$update['nickname'] = '机器人管理';
}

View File

@ -2,7 +2,7 @@
<div class="setting-component-item">
<Form ref="formData" :model="formData" :rules="ruleData" label-width="auto" @submit.native.prevent>
<div class="block-setting-box">
<h3>{{ $L('自动签到') }}</h3>
<h3>{{ $L('签到设置') }}</h3>
<FormItem :label="$L('功能开启')" prop="open">
<RadioGroup v-model="formData.open">
<Radio label="open">{{ $L('开启') }}</Radio>
@ -14,6 +14,21 @@
</div>
</FormItem>
<template v-if="formData.open === 'open'">
<FormItem :label="$L('签到时间')" prop="time">
<TimePicker
v-model="formData.time"
type="timerange"
format="HH:mm"
:placeholder="$L('请选择签到时间')"/>
<div class="form-tip">{{$L('每日首次签到成功消息通知')}}</div>
</FormItem>
<FormItem :label="$L('签到通知')" prop="notice">
<RadioGroup v-model="formData.notice">
<Radio label="open">{{ $L('开启') }}</Radio>
<Radio label="close">{{ $L('关闭') }}</Radio>
</RadioGroup>
<div class="form-tip">{{$L('每日首次签到成功消息通知')}}</div>
</FormItem>
<FormItem :label="$L('允许修改')" prop="edit">
<RadioGroup v-model="formData.edit">
<Radio label="open">{{ $L('允许') }}</Radio>
@ -21,16 +36,23 @@
</RadioGroup>
<div class="form-tip">{{$L('允许成员自己修改MAC地址')}}</div>
</FormItem>
<FormItem :label="$L('安装说明')" prop="explain">
<p>1. {{$L('签到延迟时长为±1分钟。')}}</p>
<p>2. {{$L('设备连接上指定路由器WiFi后自动签到。')}}</p>
<p>3. {{$L('仅支持Openwrt系统的路由器。')}}</p>
<p>4. {{$L('关闭签到功能再开启需要重新安装。')}}</p>
<p>5. {{$L('进入路由器终端执行以下命令即可完成安装:')}}</p>
<Input ref="cmd" @on-focus="clickCmd" style="margin-top:6px" type="textarea" readonly :value="formData.cmd"/>
</FormItem>
</template>
</div>
<template v-if="formData.open === 'open'">
<div class="block-setting-placeholder"></div>
<div class="block-setting-box">
<h3>{{ $L('自动签到') }}</h3>
<FormItem :label="$L('安装说明')" prop="explain">
<p>1. {{ $L('自动签到延迟时长为±1分钟。') }}</p>
<p>2. {{ $L('设备连接上指定路由器WiFi后自动签到。') }}</p>
<p>3. {{ $L('仅支持Openwrt系统的路由器。') }}</p>
<p>4. {{ $L('关闭签到功能再开启需要重新安装。') }}</p>
<p>5. {{ $L('进入路由器终端执行以下命令即可完成安装:') }}</p>
<Input ref="cmd" @on-focus="clickCmd" style="margin-top:6px" type="textarea" readonly :value="formData.cmd"/>
</FormItem>
</div>
</template>
</Form>
<div class="setting-footer">
<Button :loading="loadIng > 0" type="primary" @click="submitForm">{{ $L('提交') }}</Button>

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB