model = new EctUser(); } /** * @param int $user_id * @return User * @throws IllegalUsageException */ public function getUser(int $user_id): User { $result = EctUser::where('user_id', $user_id)->first(); if ($result === null) throw new IllegalUsageException(); return new User($result->user_id, $result->user_name, $result->role_id, $result->department_id, $result->user_rfid); } /** * 返回用户的rfid */ public function getRfid(User $user): string { return EctUser::where('user_id', $user->user_id)->first(); } /** * 根据用户名返回用户 * @param string $name * @return array * @throws IllegalUsageException */ public function getUserByName(string $name): array { $list = []; $ectUsers = EctUser::where('user_name', $name)->get(); if ($ectUsers === null) throw new IllegalUsageException(); foreach ($ectUsers as $ectUser) { $list[] = new User($ectUser->user_id, $ectUser->user_name, $ectUser->role_id, $ectUser->department_id, $ectUser->user_rfid); } return $list; } /** * @param int $id * @return array * @throws IllegalUsageException */ public function getUserById(int $id): array { $ectUsers = EctUser::where('user_id', $id)->first(); if ($ectUsers === null) throw new IllegalUsageException(); $list = []; foreach ($ectUsers as $ectUser) { $list[] = new User($ectUser->user_id, $ectUser->user_name, $ectUser->role_id, $ectUser->department_id, $ectUser->user_rfid); } return $list; } /** * @return array 用户列表 */ public function getAll(): array { $list = []; $all = EctUser::all(); foreach ($all as $user) { $list[] = new User($user->user_id, $user->user_name, $user->role_id, $user->department_id, $user->user_rfid); } return $list; } /** * 根据 RFID 卡号查询操作员(人员卡识别用) * * @param string $rfid RFID 卡号(自动转大写匹配) * @return EctUser|null 找到返回模型,找不到返回 null * @throws ResultNotAsExpectedException */ public function findByRfid(string $rfid): ?EctUser { $rfid = strtoupper($rfid); $isAllDigit = ctype_digit($rfid); $rfids = EctUser::where(function ($query) use ($rfid, $isAllDigit) { $query->where('user_rfid', $rfid) ->orWhere('rfid3', $rfid); if ($isAllDigit) { $rfidWithoutZero = ltrim($rfid, '0'); $rfidWithoutZero = $rfidWithoutZero === '' ? '0' : $rfidWithoutZero; $query->orWhere('user_rfid', $rfidWithoutZero) ->orWhere('rfid3', $rfidWithoutZero); } })->distinct() ->get(); // 如果数量不对就抛出异常 if (count($rfids) > 1 || count($rfids) == 0) { throw new ResultNotAsExpectedException("RFID Conflict, rfid {$rfid} count: " . count($rfids)); } return $rfids[0]; } public static function new(): BaseRepository { return new self(); } }