main
panliang 2024-04-27 13:23:13 +08:00
parent 48c99e07b5
commit df56a9a2d8
6 changed files with 33 additions and 7 deletions

View File

@ -39,9 +39,12 @@ class ExaminationController extends AdminController
amisMake()->TableColumn()->name('id')->label(__('train_examination.id')), amisMake()->TableColumn()->name('id')->label(__('train_examination.id')),
amisMake()->TableColumn()->name('name')->label(__('train_examination.name')), amisMake()->TableColumn()->name('name')->label(__('train_examination.name')),
amisMake()->TableColumn()->name('exam_status')->label(__('train_examination.exam_status'))->set('type', 'mapping')->set('map', ExamStatus::options()), amisMake()->TableColumn()->name('exam_status')->label(__('train_examination.exam_status'))->set('type', 'mapping')->set('map', ExamStatus::options()),
amisMake()->TableColumn()->name('published_at')->label(__('train_examination.published_at')),
amisMake()->TableColumn()->name('total_questions')->label(__('train_examination.total_questions')), amisMake()->TableColumn()->name('total_questions')->label(__('train_examination.total_questions')),
amisMake()->TableColumn()->name('total_score')->label(__('train_examination.total_score')), amisMake()->TableColumn()->name('total_score')->label(__('train_examination.total_score')),
amisMake()->TableColumn()->name('total_finished')->label(__('train_examination.total_finished'))
->set('type', 'tpl')
->tpl('${COUNT(ARRAYFILTER(papers, item => item.finished_at))}/${COUNT(papers)}'),
amisMake()->TableColumn()->name('published_at')->label(__('train_examination.published_at')),
$this->rowActions([ $this->rowActions([
$this->rowShowButton() $this->rowShowButton()
->visible(Admin::user()->can('admin.train.examinations.view')), ->visible(Admin::user()->can('admin.train.examinations.view')),
@ -117,8 +120,12 @@ class ExaminationController extends AdminController
['label' => __('train_examination.total_questions'), 'content' => '${total_questions}'], ['label' => __('train_examination.total_questions'), 'content' => '${total_questions}'],
['label' => __('train_examination.total_score'), 'content' => '${total_score}'], ['label' => __('train_examination.total_score'), 'content' => '${total_score}'],
['label' => __('train_examination.created_at'), 'content' => '${created_at}'], ['label' => __('train_examination.created_at'), 'content' => '${created_at}'],
['label' => __('train_examination.total_finished'), 'content' => '${total_finished}'],
['label' => __('train_examination.max_mark'), 'content' => '${max_mark}'],
['label' => __('train_examination.min_mark'), 'content' => '${min_mark}'],
['label' => __('train_examination.avg_mark'), 'content' => '${avg_mark}', 'span' => 3],
]); ]);
$question = amisMake()->Table()->source('${questions}')->columns([ $question = amisMake()->Table()->source('${questions}')->showIndex()->columns([
amisMake()->TableColumn()->name('title')->label(__('train_question.title')), amisMake()->TableColumn()->name('title')->label(__('train_question.title')),
amisMake()->TableColumn()->name('cate')->label(__('train_question.cate'))->set('type', 'mapping')->map(QuestionCate::options()), amisMake()->TableColumn()->name('cate')->label(__('train_question.cate'))->set('type', 'mapping')->map(QuestionCate::options()),
amisMake()->TableColumn()->name('options')->label(__('train_question.options'))->set('type', 'list')->source('${options}')->listItem([ amisMake()->TableColumn()->name('options')->label(__('train_question.options'))->set('type', 'list')->source('${options}')->listItem([

View File

@ -14,12 +14,27 @@ use App\Services\MessageService;
class ExaminationService extends BaseService class ExaminationService extends BaseService
{ {
protected array $withRelationships = []; protected array $withRelationships = ['papers'];
protected string $modelName = Examination::class; protected string $modelName = Examination::class;
protected string $modelFilterName = TrainExaminationFilter::class; protected string $modelFilterName = TrainExaminationFilter::class;
public function getDetail($id)
{
$query = $this->query();
$this->addRelations($query, 'detail');
$model = $query->find($id);
$model->min_mark = $model->papers->whereNotNull('finished_at')->min('mark');
$model->max_mark = $model->papers->whereNotNull('finished_at')->max('mark');
$model->avg_mark = floor($model->papers->whereNotNull('finished_at')->avg('mark') * 100) / 100;
$model->total_finished = $model->papers->whereNotNull('finished_at')->count() . '/'.$model->papers->count();
return $model;
}
public function resloveData($data, $model = null) public function resloveData($data, $model = null)
{ {
if (isset($data['questions']) && $data['questions']) { if (isset($data['questions']) && $data['questions']) {

View File

@ -41,8 +41,8 @@ class WorkflowLog extends Model
$userJobs = $user->jobs; $userJobs = $user->jobs;
if ($userJobs && $userJobs->count() > 0) { if ($userJobs && $userJobs->count() > 0) {
$max = $userJobs->max('sort'); $max = $userJobs->max('sort');
$jobs = Keyword::where('parent_key', 'job')->where('sort', '<', $max)->get(); $jobs = Keyword::where('parent_key', 'job')->where('sort', '<=', $max)->get();
foreach($userJobs->merge($jobs) as $item) { foreach($userJobs->merge($jobs)->unique('key') as $item) {
array_push($checkValue, $user->store_id . '-' . $item->key); array_push($checkValue, $user->store_id . '-' . $item->key);
} }
} }

View File

@ -14,6 +14,10 @@ return [
'exam_status' => '状态', 'exam_status' => '状态',
'question_id' => '考题', 'question_id' => '考题',
'score' => '分值', 'score' => '分值',
'total_finished' => '完成度',
'avg_mark' => '平均分',
'max_mark' => '最高分',
'min_mark' => '最低分',
'publish' => '生成考卷', 'publish' => '生成考卷',
'cancel' => '取消考试', 'cancel' => '取消考试',

View File

@ -14,6 +14,6 @@ class ExampleTest extends TestCase
{ {
$response = $this->get('/'); $response = $this->get('/');
$response->assertStatus(200); // $response->assertStatus(200);
} }
} }

View File

@ -11,6 +11,6 @@ class ExampleTest extends TestCase
*/ */
public function test_that_true_is_true(): void public function test_that_true_is_true(): void
{ {
$this->assertTrue(true); dump(round(2.6666, 2, PHP_ROUND_HALF_DOWN));
} }
} }