mirror of
https://github.com/lkddi/nexusphp.git
synced 2026-04-24 12:07:23 +08:00
[exam] add progress do update the same time
This commit is contained in:
@@ -45,8 +45,7 @@ class Test extends Command
|
||||
public function handle()
|
||||
{
|
||||
$rep = new ExamRepository();
|
||||
// $r = $rep->assignToUser(3);
|
||||
echo new A;
|
||||
$r = $rep->addProgress(1, 1, 250, 1);
|
||||
dd($r);
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -22,13 +22,13 @@ class Exam extends NexusModel
|
||||
];
|
||||
|
||||
const INDEX_UPLOADED = 1;
|
||||
const INDEX_SEED_TIME_AVERGAGE = 2;
|
||||
const INDEX_SEED_TIME_AVERAGE = 2;
|
||||
const INDEX_DOWNLOADED = 3;
|
||||
const INDEX_BONUS = 4;
|
||||
|
||||
public static $indexes = [
|
||||
self::INDEX_UPLOADED => ['name' => 'Uploaded', 'unit' => 'GB'],
|
||||
self::INDEX_SEED_TIME_AVERGAGE => ['name' => 'Seed Time Average', 'unit' => 'Hour'],
|
||||
self::INDEX_SEED_TIME_AVERAGE => ['name' => 'Seed Time Average', 'unit' => 'Hour'],
|
||||
self::INDEX_DOWNLOADED => ['name' => 'Downloaded', 'unit' => 'GB'],
|
||||
self::INDEX_BONUS => ['name' => 'Bonus', 'unit' => ''],
|
||||
];
|
||||
@@ -41,7 +41,7 @@ class Exam extends NexusModel
|
||||
self::FILTER_USER_REGISTER_TIME_RANGE => ['name' => 'User Register Time Range'],
|
||||
];
|
||||
|
||||
public function getStatusTextAttribute()
|
||||
public function getStatusTextAttribute(): string
|
||||
{
|
||||
return self::$status[$this->status]['text'] ?? '';
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ namespace App\Models;
|
||||
|
||||
class ExamUser extends NexusModel
|
||||
{
|
||||
protected $fillable = ['exam_id', 'uid', 'status', 'result'];
|
||||
protected $fillable = ['exam_id', 'uid', 'status', 'progress'];
|
||||
|
||||
public $timestamps = true;
|
||||
|
||||
@@ -17,7 +17,7 @@ class ExamUser extends NexusModel
|
||||
];
|
||||
|
||||
protected $casts = [
|
||||
'result' => 'json'
|
||||
'progress' => 'json'
|
||||
];
|
||||
|
||||
public function getStatusTextAttribute()
|
||||
|
||||
@@ -11,7 +11,7 @@ class NexusModel extends Model
|
||||
|
||||
public $timestamps = false;
|
||||
|
||||
protected $perPage = 2;
|
||||
// protected $perPage = 2;
|
||||
|
||||
/**
|
||||
* 为数组 / JSON 序列化准备日期。
|
||||
|
||||
@@ -57,8 +57,6 @@ class User extends Authenticatable
|
||||
self::CLASS_STAFF_LEADER => ['text' => 'Staff Leader'],
|
||||
];
|
||||
|
||||
protected $perPage = 2;
|
||||
|
||||
public function getClassTextAttribute(): string
|
||||
{
|
||||
return self::$classes[$this->class]['text'] ?? '';
|
||||
|
||||
@@ -208,6 +208,7 @@ class ExamRepository extends BaseRepository
|
||||
|
||||
public function addProgress(int $examUserId, int $indexId, int $value, int $torrentId)
|
||||
{
|
||||
$logPrefix = "examUserId: $examUserId, indexId: $indexId, value: $value, torrentId: $torrentId";
|
||||
$examUser = ExamUser::query()->with(['exam', 'user'])->findOrFail($examUserId);
|
||||
if ($examUser->status != ExamUser::STATUS_NORMAL) {
|
||||
throw new \InvalidArgumentException("ExamUser: $examUserId is not normal.");
|
||||
@@ -226,7 +227,7 @@ class ExamRepository extends BaseRepository
|
||||
}
|
||||
$torrentFields = ['id', 'visible', 'banned'];
|
||||
$torrent = Torrent::query()->findOrFail($torrentId, $torrentFields);
|
||||
$torrent->checkIsNormal(true, $torrentFields);
|
||||
$torrent->checkIsNormal($torrentFields);
|
||||
|
||||
$user = $examUser->user;
|
||||
$user->checkIsNormal();
|
||||
@@ -238,8 +239,12 @@ class ExamRepository extends BaseRepository
|
||||
'index' => $indexId,
|
||||
'value' => $value,
|
||||
];
|
||||
do_log('[addProgress] ' . nexus_json_encode($data));
|
||||
return $examUser->progresses()->create($data);
|
||||
do_log("$logPrefix [addProgress] " . nexus_json_encode($data));
|
||||
$newProgress = $examUser->progresses()->create($data);
|
||||
$examProgress = $this->calculateProgress($examUser);
|
||||
do_log("$logPrefix [updateProgress] " . nexus_json_encode($examProgress));
|
||||
$examUser->update(['progress' => $examProgress]);
|
||||
return $newProgress;
|
||||
}
|
||||
|
||||
public function getUserExamProgress($uid, $status = null)
|
||||
@@ -256,11 +261,17 @@ class ExamRepository extends BaseRepository
|
||||
if ($examUsers->count() > 1) {
|
||||
do_log("$logPrefix, user exam more than 1.", 'warning');
|
||||
}
|
||||
/** @var ExamUser $examUser */
|
||||
$examUser = $examUsers->first();
|
||||
/** @var Exam $exam */
|
||||
$progress = $this->calculateProgress($examUser);
|
||||
do_log("$logPrefix, progress: " . nexus_json_encode($progress));
|
||||
$examUser->progress = $progress;
|
||||
return $examUser;
|
||||
}
|
||||
|
||||
private function calculateProgress(ExamUser $examUser)
|
||||
{
|
||||
$exam = $examUser->exam;
|
||||
$logPrefix .= ", exam: " . $exam->id;
|
||||
$logPrefix = ", examUser: " . $examUser->id;
|
||||
if ($examUser->begin) {
|
||||
$logPrefix .= ", begin from examUser: " . $examUser->id;
|
||||
$begin = $examUser->begin;
|
||||
@@ -289,8 +300,9 @@ class ExamRepository extends BaseRepository
|
||||
->get();
|
||||
|
||||
do_log("$logPrefix, query: " . last_query() . ", progressSum: " . $progressSum->toJson());
|
||||
$examUser->progress = $progressSum->pluck('sum', 'index')->toArray();
|
||||
return $examUser;
|
||||
|
||||
return $progressSum->pluck('sum', 'index')->toArray();
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user