From 8af6d1f45939101016a9c14e95c5ca08ef7170d1 Mon Sep 17 00:00:00 2001 From: Vincent BRIDIER Date: Fri, 2 Apr 2021 12:06:39 +0200 Subject: [PATCH] - ExportCode Opti --- app/Jobs/ProcessExportCodesUniques.php | 28 +++++++++++++++++++------- app/Models/Codes.php | 2 +- config/codes.php | 5 +++++ 3 files changed, 27 insertions(+), 8 deletions(-) create mode 100644 config/codes.php diff --git a/app/Jobs/ProcessExportCodesUniques.php b/app/Jobs/ProcessExportCodesUniques.php index 45da106..6508acf 100644 --- a/app/Jobs/ProcessExportCodesUniques.php +++ b/app/Jobs/ProcessExportCodesUniques.php @@ -76,12 +76,23 @@ class ProcessExportCodesUniques implements ShouldQueue Mail::to(config('mail.MAIL_ADMIN'))->send(new ExportCodesUniques(Settings::find(1)->name, $nbCodeFic, $nbCodeTot, $nbCodeLigne)); } - private function process($nbCodeFic, $nbCodeTot, $nbCodeLigne, $totalExportedCodes, $currentFilename, $currentExportedCodes, $currentLineCodes){ - // TODO : Tester avec plus de 1000 dans le take - $nbCodeToRetrieve = $nbCodeTot < 1000 ? $nbCodeTot : 1000; - $codes = Codes::where('code_exported', 0)->take($nbCodeToRetrieve)->get(); + private function process($nbCodeFic, $nbCodeTot, $nbCodeLigne, $totalExportedCodes, $currentFilename, $currentExportedCodes, $currentLineCodes, $lastExportedCodeId = null){ + $paginate = config('code.paginate'); + $nbCodeToRetrieve = $nbCodeTot < $paginate ? $nbCodeTot : $paginate; + + if ($lastExportedCodeId === null) { + $codes = Codes::where('code_exported', 0)->take($nbCodeToRetrieve)->get(); + }else{ + $codes = Codes::where([ + ['code_exported', '=', 0], + ['id', '>', $lastExportedCodeId] + ])->take($nbCodeToRetrieve)->get(); + } + $countCodes = count($codes); + $exportedCodesId = []; + foreach ($codes as $k => $code){ if ($currentExportedCodes < $nbCodeTot){ if ($currentLineCodes === ($nbCodeLigne === 1 ? 1 : $nbCodeLigne - 1)){ @@ -95,14 +106,17 @@ class ProcessExportCodesUniques implements ShouldQueue $currentExportedCodes++; $currentLineCodes++; } - $code->code_exported = 1; - $code->save(); + + array_push($exportedCodesId, $code->id); + $lastExportedCodeId = $code->id; + if ($currentExportedCodes === $nbCodeFic) { $currentFilename++; $currentExportedCodes = 0; } if ((($k + 1) === $countCodes) && $totalExportedCodes < $nbCodeTot){ - return $this->process($nbCodeFic, $nbCodeTot, $nbCodeLigne, $totalExportedCodes, $currentFilename, $currentExportedCodes, $currentLineCodes); + Codes::whereIn('id', $exportedCodesId)->update(['code_exported' => 1]); + return $this->process($nbCodeFic, $nbCodeTot, $nbCodeLigne, $totalExportedCodes, $currentFilename, $currentExportedCodes, $currentLineCodes, $lastExportedCodeId); } } } diff --git a/app/Models/Codes.php b/app/Models/Codes.php index 05ba9bc..c48d6f7 100644 --- a/app/Models/Codes.php +++ b/app/Models/Codes.php @@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model; class Codes extends Model { - protected $fillable = ['code_unique', 'code_used', 'date_creation']; + protected $fillable = ['code_unique', 'code_used', 'code_exported', 'date_creation']; public $timestamps = false; public function participations() { diff --git a/config/codes.php b/config/codes.php new file mode 100644 index 0000000..22700d0 --- /dev/null +++ b/config/codes.php @@ -0,0 +1,5 @@ + env('CODE_PAGINATE') +];