model = new EctMetaRfidreader(); } public static function new(): static { return new self(); } /** * 通过读卡器编号查询读卡器所在步骤信息 * * 联合查询路径: * ect_meta_rfidreader.reader_no * → ect_meta_facilities.reader_id * → ect_meta_process.process_id * → process_name(步骤名称) * * @param string $readerNo 读卡器编号(大写) * @return array{readerId: string, readerType: string}|null * readerId = reader_id(读卡器ID) * readerType = process_name(该读卡器所在步骤,如"清洗") */ public function findReaderInfo(string $readerNo): ?array { $readerNo = strtoupper($readerNo); $reader = EctMetaRfidreader::where('reader_no', $readerNo) ->select('reader_id') ->first(); if ($reader === null) { return null; } $readerId = (string) $reader->reader_id; $facility = EctMetaFacilities::where('reader_id', $readerId) ->select('process_id') ->first(); if ($facility === null) { return ['readerId' => $readerId, 'readerType' => '']; } $process = EctMetaProcess::where('process_id', $facility->process_id) ->select('process_name') ->first(); $readerType = (string)$process?->process_name; return ['readerId' => $readerId, 'readerType' => $readerType]; } }