mirror of
https://github.com/lkddi/nexusphp.git
synced 2026-04-24 12:07:23 +08:00
exam add user filter: register_days_range
This commit is contained in:
@@ -98,8 +98,9 @@ class Test extends Command
|
|||||||
*/
|
*/
|
||||||
public function handle()
|
public function handle()
|
||||||
{
|
{
|
||||||
CleanupRepository::recordBatch(NexusDB::redis(), "1", "5");
|
$str = "2023-11-14 02:59:00";
|
||||||
CleanupRepository::runBatchJobCalculateUserSeedBonus("bbbbb");
|
$diff = Carbon::parse($str)->diffInDays(now());
|
||||||
|
dd($diff);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -100,6 +100,8 @@ class ExamResource extends Resource
|
|||||||
->label(__('label.user.class')),
|
->label(__('label.user.class')),
|
||||||
Forms\Components\DateTimePicker::make('filters.register_time_range.0')->label(__("label.exam.register_time_range.begin")),
|
Forms\Components\DateTimePicker::make('filters.register_time_range.0')->label(__("label.exam.register_time_range.begin")),
|
||||||
Forms\Components\DateTimePicker::make('filters.register_time_range.1')->label(__("label.exam.register_time_range.end")),
|
Forms\Components\DateTimePicker::make('filters.register_time_range.1')->label(__("label.exam.register_time_range.end")),
|
||||||
|
Forms\Components\TextInput::make('filters.register_days_range.0')->numeric()->label(__("label.exam.register_days_range.begin")),
|
||||||
|
Forms\Components\TextInput::make('filters.register_days_range.1')->numeric()->label(__("label.exam.register_days_range.end")),
|
||||||
Forms\Components\CheckboxList::make('filters.donate_status')
|
Forms\Components\CheckboxList::make('filters.donate_status')
|
||||||
->options(self::$yesOrNo)
|
->options(self::$yesOrNo)
|
||||||
->label(__('label.exam.donated')),
|
->label(__('label.exam.donated')),
|
||||||
|
|||||||
@@ -51,11 +51,13 @@ class Exam extends NexusModel
|
|||||||
const FILTER_USER_CLASS = 'classes';
|
const FILTER_USER_CLASS = 'classes';
|
||||||
const FILTER_USER_REGISTER_TIME_RANGE = 'register_time_range';
|
const FILTER_USER_REGISTER_TIME_RANGE = 'register_time_range';
|
||||||
const FILTER_USER_DONATE = 'donate_status';
|
const FILTER_USER_DONATE = 'donate_status';
|
||||||
|
const FILTER_USER_REGISTER_DAYS_RANGE = 'register_days_range';
|
||||||
|
|
||||||
public static $filters = [
|
public static $filters = [
|
||||||
self::FILTER_USER_CLASS => ['name' => 'User class'],
|
self::FILTER_USER_CLASS => ['name' => 'User class'],
|
||||||
self::FILTER_USER_REGISTER_TIME_RANGE => ['name' => 'User register time range'],
|
self::FILTER_USER_REGISTER_TIME_RANGE => ['name' => 'User register time range'],
|
||||||
self::FILTER_USER_DONATE => ['name' => 'User donated'],
|
self::FILTER_USER_DONATE => ['name' => 'User donated'],
|
||||||
|
self::FILTER_USER_REGISTER_DAYS_RANGE => ['name' => 'User register days range'],
|
||||||
];
|
];
|
||||||
|
|
||||||
protected static function booted()
|
protected static function booted()
|
||||||
@@ -138,6 +140,19 @@ class Exam extends NexusModel
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$filter = self::FILTER_USER_REGISTER_DAYS_RANGE;
|
||||||
|
if (!empty($currentFilters[$filter])) {
|
||||||
|
$range = $currentFilters[$filter];
|
||||||
|
if (!empty($range[0]) || !empty($range[1])) {
|
||||||
|
$arr[] = sprintf(
|
||||||
|
"%s: %s ~ %s",
|
||||||
|
nexus_trans("exam.filters.$filter"),
|
||||||
|
$range[0] ?? "--",
|
||||||
|
$range[1] ?? '--'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$filter = self::FILTER_USER_DONATE;
|
$filter = self::FILTER_USER_DONATE;
|
||||||
if (!empty($currentFilters[$filter])) {
|
if (!empty($currentFilters[$filter])) {
|
||||||
$donateStatus = collect(User::$donateStatus)->only($currentFilters[$filter]);
|
$donateStatus = collect(User::$donateStatus)->only($currentFilters[$filter]);
|
||||||
|
|||||||
@@ -151,6 +151,30 @@ class ExamRepository extends BaseRepository
|
|||||||
throw new \InvalidArgumentException("Invalid user register time end: $end");
|
throw new \InvalidArgumentException("Invalid user register time end: $end");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if ($begin && $end && $begin > $end) {
|
||||||
|
throw new \InvalidArgumentException("user register time begin must less than end");
|
||||||
|
}
|
||||||
|
|
||||||
|
$filter = Exam::FILTER_USER_REGISTER_DAYS_RANGE;
|
||||||
|
$begin = $filters[$filter][0] ?? null;
|
||||||
|
$end = $filters[$filter][1] ?? null;
|
||||||
|
if ($begin) {
|
||||||
|
if (is_numeric($begin) && $begin >= 0) {
|
||||||
|
$hasValid = true;
|
||||||
|
} else {
|
||||||
|
throw new \InvalidArgumentException("Invalid user register days begin: $begin" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($end) {
|
||||||
|
if (is_numeric($end) && $end >= 0) {
|
||||||
|
$hasValid = true;
|
||||||
|
} else {
|
||||||
|
throw new \InvalidArgumentException("Invalid user register days end: $end");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($begin && $end && $begin > $end) {
|
||||||
|
throw new \InvalidArgumentException("user register days begin must less than end");
|
||||||
|
}
|
||||||
|
|
||||||
if (!$hasValid) {
|
if (!$hasValid) {
|
||||||
throw new \InvalidArgumentException("No valid filters");
|
throw new \InvalidArgumentException("No valid filters");
|
||||||
@@ -276,6 +300,20 @@ class ExamRepository extends BaseRepository
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$filter = Exam::FILTER_USER_REGISTER_DAYS_RANGE;
|
||||||
|
$filterValues = $filters[$filter] ?? [];
|
||||||
|
$value = $user->added->diffInDays(now());
|
||||||
|
$begin = $filterValues[0] ?? null;
|
||||||
|
$end = $filterValues[1] ?? null;
|
||||||
|
if ($begin !== null && $value < $begin) {
|
||||||
|
do_log("$logPrefix, user registerDays: $value not bigger than begin: " . $begin);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if ($end !== null && $value > $end) {
|
||||||
|
do_log("$logPrefix, user registerDays: $value not less than end: " . $end);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -953,6 +991,18 @@ class ExamRepository extends BaseRepository
|
|||||||
$baseQuery->where("$userTable.added", '<=', Carbon::parse($range[1])->toDateTimeString());
|
$baseQuery->where("$userTable.added", '<=', Carbon::parse($range[1])->toDateTimeString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$filter = Exam::FILTER_USER_REGISTER_DAYS_RANGE;
|
||||||
|
$range = $filters[$filter] ?? [];
|
||||||
|
if (!empty($range)) {
|
||||||
|
if (!empty($range[0])) {
|
||||||
|
$baseQuery->where("$userTable.added", "<=", now()->subDays($range[0])->toDateTimeString());
|
||||||
|
}
|
||||||
|
if (!empty($range[1])) {
|
||||||
|
$baseQuery->where("$userTable.added", '>=', now()->subDays($range[1])->toDateTimeString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//Does not has this exam
|
//Does not has this exam
|
||||||
$baseQuery->whereDoesntHave('exams', function (Builder $query) use ($exam) {
|
$baseQuery->whereDoesntHave('exams', function (Builder $query) use ($exam) {
|
||||||
$query->where('exam_id', $exam->id);
|
$query->where('exam_id', $exam->id);
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
defined('VERSION_NUMBER') || define('VERSION_NUMBER', '1.8.9');
|
defined('VERSION_NUMBER') || define('VERSION_NUMBER', '1.8.9');
|
||||||
defined('RELEASE_DATE') || define('RELEASE_DATE', '2023-11-14');
|
defined('RELEASE_DATE') || define('RELEASE_DATE', '2023-11-15');
|
||||||
defined('IN_TRACKER') || define('IN_TRACKER', false);
|
defined('IN_TRACKER') || define('IN_TRACKER', false);
|
||||||
defined('PROJECTNAME') || define("PROJECTNAME","NexusPHP");
|
defined('PROJECTNAME') || define("PROJECTNAME","NexusPHP");
|
||||||
defined('NEXUSPHPURL') || define("NEXUSPHPURL","https://nexusphp.org");
|
defined('NEXUSPHPURL') || define("NEXUSPHPURL","https://nexusphp.org");
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ return [
|
|||||||
\App\Models\Exam::FILTER_USER_CLASS => 'User class',
|
\App\Models\Exam::FILTER_USER_CLASS => 'User class',
|
||||||
\App\Models\Exam::FILTER_USER_REGISTER_TIME_RANGE => 'Register time range',
|
\App\Models\Exam::FILTER_USER_REGISTER_TIME_RANGE => 'Register time range',
|
||||||
\App\Models\Exam::FILTER_USER_DONATE => 'Donated',
|
\App\Models\Exam::FILTER_USER_DONATE => 'Donated',
|
||||||
|
\App\Models\Exam::FILTER_USER_REGISTER_DAYS_RANGE => 'Range of days of registration',
|
||||||
],
|
],
|
||||||
'require_value' => 'Require',
|
'require_value' => 'Require',
|
||||||
'current_value' => 'Current',
|
'current_value' => 'Current',
|
||||||
|
|||||||
@@ -148,6 +148,10 @@ return [
|
|||||||
'begin' => 'Register time begin',
|
'begin' => 'Register time begin',
|
||||||
'end' => 'Register time end',
|
'end' => 'Register time end',
|
||||||
],
|
],
|
||||||
|
'register_days_range' => [
|
||||||
|
'begin' => 'Minimum days registered',
|
||||||
|
'end' => 'Maximum days registered',
|
||||||
|
],
|
||||||
'donated' => 'Donated',
|
'donated' => 'Donated',
|
||||||
'index_formatted' => 'Exam indexes',
|
'index_formatted' => 'Exam indexes',
|
||||||
'filter_formatted' => 'Target users',
|
'filter_formatted' => 'Target users',
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ return [
|
|||||||
\App\Models\Exam::FILTER_USER_CLASS => '用户等级',
|
\App\Models\Exam::FILTER_USER_CLASS => '用户等级',
|
||||||
\App\Models\Exam::FILTER_USER_REGISTER_TIME_RANGE => '注册时间范围',
|
\App\Models\Exam::FILTER_USER_REGISTER_TIME_RANGE => '注册时间范围',
|
||||||
\App\Models\Exam::FILTER_USER_DONATE => '是否捐赠',
|
\App\Models\Exam::FILTER_USER_DONATE => '是否捐赠',
|
||||||
|
\App\Models\Exam::FILTER_USER_REGISTER_DAYS_RANGE => '注册天数范围',
|
||||||
],
|
],
|
||||||
'require_value' => '要求',
|
'require_value' => '要求',
|
||||||
'current_value' => '当前',
|
'current_value' => '当前',
|
||||||
|
|||||||
@@ -150,6 +150,10 @@ return [
|
|||||||
'begin' => '注册时间开始',
|
'begin' => '注册时间开始',
|
||||||
'end' => '注册时间结束',
|
'end' => '注册时间结束',
|
||||||
],
|
],
|
||||||
|
'register_days_range' => [
|
||||||
|
'begin' => '注册天数最少',
|
||||||
|
'end' => '注册天数最多',
|
||||||
|
],
|
||||||
'donated' => '是否捐赠',
|
'donated' => '是否捐赠',
|
||||||
'index_formatted' => '考核指标',
|
'index_formatted' => '考核指标',
|
||||||
'filter_formatted' => '目标用户',
|
'filter_formatted' => '目标用户',
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ return [
|
|||||||
\App\Models\Exam::FILTER_USER_CLASS => '用戶等級',
|
\App\Models\Exam::FILTER_USER_CLASS => '用戶等級',
|
||||||
\App\Models\Exam::FILTER_USER_REGISTER_TIME_RANGE => '註冊時間範圍',
|
\App\Models\Exam::FILTER_USER_REGISTER_TIME_RANGE => '註冊時間範圍',
|
||||||
\App\Models\Exam::FILTER_USER_DONATE => '是否捐贈',
|
\App\Models\Exam::FILTER_USER_DONATE => '是否捐贈',
|
||||||
|
\App\Models\Exam::FILTER_USER_REGISTER_DAYS_RANGE => '註冊天數範圍',
|
||||||
],
|
],
|
||||||
'require_value' => '要求',
|
'require_value' => '要求',
|
||||||
'current_value' => '當前',
|
'current_value' => '當前',
|
||||||
|
|||||||
@@ -148,6 +148,10 @@ return [
|
|||||||
'begin' => '註冊時間開始',
|
'begin' => '註冊時間開始',
|
||||||
'end' => '註冊時間結束',
|
'end' => '註冊時間結束',
|
||||||
],
|
],
|
||||||
|
'register_days_range' => [
|
||||||
|
'begin' => '註冊天數最少',
|
||||||
|
'end' => '註冊天數最多',
|
||||||
|
],
|
||||||
'donated' => '是否捐贈',
|
'donated' => '是否捐贈',
|
||||||
'index_formatted' => '考核指標',
|
'index_formatted' => '考核指標',
|
||||||
'filter_formatted' => '目標用戶',
|
'filter_formatted' => '目標用戶',
|
||||||
|
|||||||
Reference in New Issue
Block a user