exam add user filter: register_days_range

This commit is contained in:
xiaomlove
2023-11-15 02:19:03 +08:00
parent 4907b2f7ac
commit 8e649ffafb
11 changed files with 86 additions and 3 deletions
+3 -2
View File
@@ -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')),
+15
View File
@@ -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]);
+50
View File
@@ -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 -1
View File
@@ -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");
+1
View File
@@ -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',
+4
View File
@@ -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',
+1
View File
@@ -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' => '当前',
+4
View File
@@ -150,6 +150,10 @@ return [
'begin' => '注册时间开始', 'begin' => '注册时间开始',
'end' => '注册时间结束', 'end' => '注册时间结束',
], ],
'register_days_range' => [
'begin' => '注册天数最少',
'end' => '注册天数最多',
],
'donated' => '是否捐赠', 'donated' => '是否捐赠',
'index_formatted' => '考核指标', 'index_formatted' => '考核指标',
'filter_formatted' => '目标用户', 'filter_formatted' => '目标用户',
+1
View File
@@ -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' => '當前',
+4
View File
@@ -148,6 +148,10 @@ return [
'begin' => '註冊時間開始', 'begin' => '註冊時間開始',
'end' => '註冊時間結束', 'end' => '註冊時間結束',
], ],
'register_days_range' => [
'begin' => '註冊天數最少',
'end' => '註冊天數最多',
],
'donated' => '是否捐贈', 'donated' => '是否捐贈',
'index_formatted' => '考核指標', 'index_formatted' => '考核指標',
'filter_formatted' => '目標用戶', 'filter_formatted' => '目標用戶',