更新
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace app\common\service\prescriptionai;
|
||||
|
||||
use app\adminapi\logic\auth\AuthLogic;
|
||||
use app\adminapi\logic\firstvisit\MyPatientLogic;
|
||||
use app\adminapi\logic\tcm\PrescriptionLogic;
|
||||
use app\common\model\auth\Admin;
|
||||
use think\facade\Db;
|
||||
|
||||
final class PrescriptionAiAccess
|
||||
{
|
||||
public static function actor(int $adminId): ?array
|
||||
{
|
||||
$admin = Admin::where('id', $adminId)->whereNull('delete_time')->where('disable', 0)->find();
|
||||
if (!$admin) {
|
||||
return null;
|
||||
}
|
||||
// Do not put credentials or login material in task snapshots.
|
||||
return ['admin_id' => $adminId, 'id' => $adminId, 'root' => (int) $admin->root,
|
||||
'name' => (string) $admin->name, 'role_id' => (array) $admin->role_id,
|
||||
'dept_id' => (array) $admin->dept_id];
|
||||
}
|
||||
|
||||
public static function allowed(int $adminId, array $info, string $action): bool
|
||||
{
|
||||
if ($adminId <= 0) {
|
||||
return false;
|
||||
}
|
||||
if ((int) ($info['root'] ?? 0) === 1) {
|
||||
return true;
|
||||
}
|
||||
return in_array('tcm.prescriptionai/' . strtolower($action),
|
||||
array_map('strtolower', AuthLogic::getAuthByAdminId($adminId)), true);
|
||||
}
|
||||
|
||||
public static function canGenerate(int $adminId, array $info): bool
|
||||
{
|
||||
return self::allowed($adminId, $info, 'regenerate') && self::allowed($adminId, $info, 'detail');
|
||||
}
|
||||
|
||||
public static function prescription(int $id, int $adminId, array $info): ?array
|
||||
{
|
||||
$row = Db::name('tcm_prescription')->where('id', $id)->whereNull('delete_time')->find();
|
||||
if (!$row || !PrescriptionLogic::canViewPrescription($row, $adminId, $info)) {
|
||||
return null;
|
||||
}
|
||||
$diagnosisId = (int) ($row['diagnosis_id'] ?? 0);
|
||||
if ($diagnosisId > 0 && !self::diagnosis($diagnosisId, $adminId, $info)) {
|
||||
return null;
|
||||
}
|
||||
return $row;
|
||||
}
|
||||
|
||||
public static function diagnosis(int $id, int $adminId, array $info): bool
|
||||
{
|
||||
if ($id <= 0 || $adminId <= 0) {
|
||||
return false;
|
||||
}
|
||||
$query = Db::name('tcm_diagnosis')->alias('d')->where('d.id', $id)->whereNull('d.delete_time');
|
||||
MyPatientLogic::applyScope($query, $adminId, $info);
|
||||
return $query->count() > 0;
|
||||
}
|
||||
|
||||
public static function sourceIds(array $ids, int $adminId, array $info): bool
|
||||
{
|
||||
$ids = array_values(array_unique(array_filter(array_map('intval', $ids), static fn ($v): bool => $v > 0)));
|
||||
if ($ids === []) {
|
||||
return false;
|
||||
}
|
||||
$query = Db::name('tcm_diagnosis')->alias('d')->whereIn('d.id', $ids)->whereNull('d.delete_time');
|
||||
MyPatientLogic::applyScope($query, $adminId, $info);
|
||||
return (int) $query->count() === count($ids);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user