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()
{
CleanupRepository::recordBatch(NexusDB::redis(), "1", "5");
CleanupRepository::runBatchJobCalculateUserSeedBonus("bbbbb");
$str = "2023-11-14 02:59:00";
$diff = Carbon::parse($str)->diffInDays(now());
dd($diff);
}
}
@@ -100,6 +100,8 @@ class ExamResource extends Resource
->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.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')
->options(self::$yesOrNo)
->label(__('label.exam.donated')),
+15
View File
@@ -51,11 +51,13 @@ class Exam extends NexusModel
const FILTER_USER_CLASS = 'classes';
const FILTER_USER_REGISTER_TIME_RANGE = 'register_time_range';
const FILTER_USER_DONATE = 'donate_status';
const FILTER_USER_REGISTER_DAYS_RANGE = 'register_days_range';
public static $filters = [
self::FILTER_USER_CLASS => ['name' => 'User class'],
self::FILTER_USER_REGISTER_TIME_RANGE => ['name' => 'User register time range'],
self::FILTER_USER_DONATE => ['name' => 'User donated'],
self::FILTER_USER_REGISTER_DAYS_RANGE => ['name' => 'User register days range'],
];
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;
if (!empty($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");
}
}
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) {
throw new \InvalidArgumentException("No valid filters");
@@ -276,6 +300,20 @@ class ExamRepository extends BaseRepository
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;
}
@@ -953,6 +991,18 @@ class ExamRepository extends BaseRepository
$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
$baseQuery->whereDoesntHave('exams', function (Builder $query) use ($exam) {
$query->where('exam_id', $exam->id);