feat: 实现TCP Server
This commit is contained in:
@@ -0,0 +1,119 @@
|
||||
<?php
|
||||
|
||||
namespace app\repository;
|
||||
|
||||
use app\model\EctUser;
|
||||
use app\repository\bean\User;
|
||||
use app\flow\exception\IllegalUsageException;
|
||||
use app\repository\exception\ResultNotAsExpectedException;
|
||||
use support\Model;
|
||||
|
||||
class UserRepository extends BaseRepository
|
||||
{
|
||||
|
||||
|
||||
public function __construct(){
|
||||
$this->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<User>
|
||||
* @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<User>
|
||||
* @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<User> 用户列表
|
||||
*/
|
||||
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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user