0

I have stored procedure which is doing a task. When i try to execute in the controller it takes more time. So i planned to put as Job. When i try to execute nothing happens in the execution

Controller

try {
    $emailAddress = auth()->user()->email ?? NULL;
    SubjectAllocationAllJob::dispatch(
        $request->course,
        $request->regulation,
        $request->batch,
        $request->semester,
        $emailAddress
    );
    Alert::success('Exam Application Started Successfully. You will recieve email shortly');

    return redirect()->route('admin.exam.preprocess.subjectmapping.all');
} catch (Exception $e) {
    Alert::error('Error Mapping Exam Application');

    return redirect()->back()->withInput();
}

SubjectAllocationAllJob

<?php

namespace App\Jobs\ExamPreProcess;

use Illuminate\Bus\Queueable;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Mail;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use App\Mail\SubjectMappingAllSuccessMail;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Contracts\Queue\ShouldBeUnique;

class SubjectAllocationAllJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public $regulation;
    public $course;
    public $batch;
    public $semester;
    public $email;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct($regulation, $course, $batch, $semester, $email)
    {
        $this->regulation = $regulation;
        $this->course = $course;
        $this->batch = $batch;
        $this->semester = $semester;
        $this->email = $email;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        DB::select(
            'CALL SubjectAllocation(?,?,?,?,?)',
            array(
                $this->course,
                $this->regulation,
                $this->batch,
                $this->semester,
                session('ExamID')
            )
        );

        if (!empty($this->email)) {
            Mail::to($this->email)->send(new SubjectMappingAllSuccessMail());
        }
    }
}

Job is running properly and i also i am getting an email. But in the mysql server nothing happens. If i try to run separately it is working fine.

procedure

DELIMITER $$
DROP PROCEDURE IF EXISTS SubjectAllocation $$
CREATE PROCEDURE `SubjectAllocation`(
    IN coursesin VARCHAR(25),
    IN regulationsin VARCHAR(25),
    IN batchin VARCHAR(25),
    IN semesterin VARCHAR(25),
    IN examyearin VARCHAR(2)
)
BEGIN
DROP
    TEMPORARY TABLE IF EXISTS `subjectassign`; CREATE TEMPORARY TABLE `subjectassign` (
        `subject_id` INT, `student_id` INT,
        `subjecttype_id` INT
    ); INSERT INTO `subjectassign`
SELECT
    `subjects`.`id`,
    `students`.`id`,
    `subjects`.`subjecttype_id`
FROM
    `subjects`,
    `students`
WHERE
    `subjects`.`programme_id` = `students`.`programme_id`
    AND `subjects`.`regulation_id` = `students`.`regulation_id`
    AND `subjects`.`course_id` = `students`.`course_id`
    AND `subjects`.`subjectallocationtype_id` IS NULL
    AND `subjects`.`semester` = semesterin
    AND `students`.`regulation_id` = regulationsin
    AND `students`.`course_id` = coursesin
    AND `students`.`batch_id` = batchin; DELETE `subjectassign`
FROM
    `subjectassign`
    RIGHT JOIN `exam_applications` ON `subjectassign`.`student_id` = `exam_applications`.`student_id`
    AND `subjectassign`.`subject_id` = `exam_applications`.`subject_id`; INSERT INTO `exam_applications`(
        `student_id`, `subject_id`, `exammonth_id`,
        `examtype_id`, `exampapertype_id`,
        `verification`, `display`
    )
SELECT
    DISTINCT `student_id`,
    `subject_id`,
    examyearin,
    '1',
    '1',
    'N',
    'Y'
FROM
    `subjectassign`;
DROP
    TEMPORARY TABLE IF EXISTS `tmp_internalmark`; CREATE TEMPORARY TABLE `tmp_internalmark` (
        `subject_id` INT, `student_id` INT
    ); INSERT INTO `tmp_internalmark`
SELECT
    `subjects`.`id`,
    `students`.`id`
FROM
    `subjects`,
    `students`
WHERE
    `subjects`.`programme_id` = `students`.`programme_id`
    AND `subjects`.`regulation_id` = `students`.`regulation_id`
    AND `subjects`.`course_id` = `students`.`course_id`
    AND `subjects`.`subjectallocationtype_id` IS NULL
    AND `subjects`.`semester` = semesterin
    AND `students`.`regulation_id` = regulationsin
    AND `students`.`course_id` = coursesin
    AND `students`.`batch_id` = batchin; DELETE `tmp_internalmark`
FROM
    `tmp_internalmark`
    RIGHT JOIN `internal_marks` ON `tmp_internalmark`.`student_id` = `internal_marks`.`student_id`
    AND `tmp_internalmark`.`subject_id` = `internal_marks`.`subject_id`; 
    INSERT INTO `internal_marks`(
        `student_id`, `subject_id`, `exammonth_id`,
        `batch_id`
    )
SELECT
    DISTINCT `student_id`,
    `subject_id`,
    examyearin,
    batchin
FROM
    `tmp_internalmark`; 
END $$
DELIMITER ;
IGP
  • 14,160
  • 4
  • 26
  • 43
VPR
  • 77
  • 2
  • 3
  • 13

0 Answers0