This commit is contained in:
Dr Masroor Ehsan 2025-01-22 13:07:08 +06:00
parent d204bfc900
commit 3b7c5c3a6f
6 changed files with 15 additions and 18 deletions

View File

@ -3,13 +3,13 @@
namespace App\Models; namespace App\Models;
use App\Domain\Rule\MatchCondition; use App\Domain\Rule\MatchCondition;
use Illuminate\Database\Eloquent\Factories\HasFactory; use App\Models\Traits\Active;
use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\HasMany;
class DicomRoutingRule extends BaseModel class DicomRoutingRule extends BaseModel
{ {
use HasFactory; use Active;
public function conditions(): HasMany public function conditions(): HasMany
{ {

View File

@ -3,14 +3,11 @@
namespace App\Models; namespace App\Models;
use App\Domain\Rule\MatchMode; use App\Domain\Rule\MatchMode;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\BelongsTo;
class DicomRuleCondition extends BaseModel class DicomRuleCondition extends BaseModel
{ {
use HasFactory; public function rule(): BelongsTo
public function routingRule(): BelongsTo
{ {
return $this->belongsTo(DicomRoutingRule::class); return $this->belongsTo(DicomRoutingRule::class);
} }

View File

@ -2,6 +2,7 @@
namespace App\Services\Pacs; namespace App\Services\Pacs;
use App\Services\StudyRouter\DicomTagIdentifiers;
use Carbon\Carbon; use Carbon\Carbon;
use Illuminate\Support\Str; use Illuminate\Support\Str;

View File

@ -5,9 +5,9 @@
use App\Domain\Study\Priority; use App\Domain\Study\Priority;
use App\Domain\Study\StudyLevelStatus; use App\Domain\Study\StudyLevelStatus;
use App\Models\DicomServer; use App\Models\DicomServer;
use App\Services\Pacs\DicomStudyMapper;
use App\Services\Pacs\DicomUtils; use App\Services\Pacs\DicomUtils;
use App\Services\Pacs\OrthancRestClient; use App\Services\Pacs\OrthancRestClient;
use App\Services\StudyRouter\DicomStudyRouter;
use Carbon\Carbon; use Carbon\Carbon;
use Exception; use Exception;
use Illuminate\Pipeline\Pipeline; use Illuminate\Pipeline\Pipeline;
@ -108,7 +108,7 @@ public function fetchStudyDetails(string $orthanc_uuid): ?array
public function transformData(mixed $orthanc_src): array public function transformData(mixed $orthanc_src): array
{ {
$inst_name = data_get($orthanc_src, 'MainDicomTags.InstitutionName'); $inst_name = data_get($orthanc_src, 'MainDicomTags.InstitutionName');
$inst_id = DicomStudyMapper::map($inst_name); $inst_id = DicomStudyRouter::map($inst_name);
$patient_name = data_get($orthanc_src, 'PatientMainDicomTags.PatientName'); $patient_name = data_get($orthanc_src, 'PatientMainDicomTags.PatientName');

View File

@ -1,15 +1,17 @@
<?php <?php
namespace App\Services\Pacs; namespace App\Services\StudyRouter;
use App\Domain\Rule\MatchMode; use App\Domain\Rule\MatchMode;
use App\Models\DicomRoutingRule;
use App\Services\ContentMatcher; use App\Services\ContentMatcher;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
final class DicomStudyMapper final class DicomStudyRouter
{ {
private static array $rules = []; private static ?Collection $rules;
private static int $catchAll = -1; private static int $catchAll = -1;
@ -18,13 +20,10 @@ final class DicomStudyMapper
*/ */
public static function map(?string $input): array public static function map(?string $input): array
{ {
if (empty(self::$rules)) { if (is_null(self::$rules)) {
self::$rules = Cache::remember('institute_names', self::$rules = Cache::remember('dicom.routers',
now()->addMinutes(15), now()->addMinutes(15),
fn () => DB::table('dicom_routing_rules') fn () => DicomRoutingRule::active()->with('conditions')->get()
->orderByDesc('priority')
->get()
->toArray()
); );
self::$catchAll = DB::table('institutes') self::$catchAll = DB::table('institutes')
->where('name', 'Catch-all') ->where('name', 'Catch-all')

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Services\Pacs; namespace App\Services\StudyRouter;
enum DicomTagIdentifiers: string enum DicomTagIdentifiers: string
{ {