This commit is contained in:
Your Name
2026-05-20 16:51:12 +08:00
parent 1005859404
commit 752eddb0ba
4 changed files with 144 additions and 150 deletions
@@ -141,7 +141,7 @@ class PrescriptionOrderLogic
}
/**
* 与 PrescriptionOrderLists 数据域一致:创建人或关联诊单医助属于当前账号可见 admin 集合
* 与 PrescriptionOrderLists 数据域一致:订单创建人属于当前账号可见 admin 集合
*/
private static function orderWithinDataScopeOwners(PrescriptionOrder $row, int $adminId, array $adminInfo): bool
{
@@ -152,16 +152,8 @@ class PrescriptionOrderLogic
if ($ids === null || $ids === []) {
return false;
}
if (in_array((int) $row->creator_id, $ids, true)) {
return true;
}
$did = (int) $row->diagnosis_id;
if ($did <= 0) {
return false;
}
$da = (int) Diagnosis::where('id', $did)->whereNull('delete_time')->value('assistant_id');
return $da > 0 && in_array($da, $ids, true);
return in_array((int) $row->creator_id, $ids, true);
}
/**
@@ -175,13 +167,6 @@ class PrescriptionOrderLogic
if ((int) $row->creator_id === $adminId) {
return true;
}
$did = (int) $row->diagnosis_id;
if ($did > 0) {
$da = (int) Diagnosis::where('id', $did)->whereNull('delete_time')->value('assistant_id');
if ($da === $adminId) {
return true;
}
}
if (self::canViewOrdersForOwnPrescription($adminInfo)) {
if (self::isPrescriptionOrderPrescriber((int) $row->prescription_id, $adminId)) {
return true;
@@ -288,7 +273,7 @@ class PrescriptionOrderLogic
}
/**
* 提成结算等与列表对齐:按开方医生 / 诊单医助 订单创建人 筛选(与 PrescriptionOrderLists::applyDoctorAssistantFilters 在非业绩抽屉场景一致)
* 提成结算等与列表对齐:按开方医生 / 订单创建人 筛选。
*
* @param array<string, mixed> $params
*/
@@ -304,15 +289,7 @@ class PrescriptionOrderLogic
}
if (isset($params['assistant_id']) && (int) $params['assistant_id'] > 0) {
$assistantId = (int) $params['assistant_id'];
$diagTbl = (new Diagnosis())->getTable();
$query->where(function ($q) use ($alias, $diagTbl, $assistantId): void {
$q->where("{$alias}.creator_id", $assistantId);
$q->whereOrRaw(
"EXISTS (SELECT 1 FROM `{$diagTbl}` dg WHERE dg.`id` = `{$alias}`.`diagnosis_id`"
. " AND dg.`delete_time` IS NULL AND dg.`assistant_id` = {$assistantId})"
);
});
$query->where("{$alias}.creator_id", (int) $params['assistant_id']);
}
}
@@ -341,7 +318,6 @@ class PrescriptionOrderLogic
}
$rxTbl = (new Prescription())->getTable();
$diagTbl = (new Diagnosis())->getTable();
$explicitAssistant = (int) ($params['assistant_id'] ?? 0);
$allowExplicitAssistantVisibility = false;
@@ -359,39 +335,24 @@ class PrescriptionOrderLogic
$query->where(function ($q) use (
$alias,
$rxTbl,
$diagTbl,
$viewerAdminId,
$explicitAssistant,
$allowExplicitAssistantVisibility,
$viewerAdminInfo
): void {
if (self::canViewOrdersForOwnPrescription($viewerAdminInfo)) {
$q->where(function ($qq) use ($alias, $rxTbl, $diagTbl, $viewerAdminId): void {
$q->where(function ($qq) use ($alias, $rxTbl, $viewerAdminId): void {
$qq->where("{$alias}.creator_id", $viewerAdminId);
$qq->whereOrRaw(
"EXISTS (SELECT 1 FROM `{$rxTbl}` rx WHERE rx.`id` = `{$alias}`.`prescription_id`"
. " AND rx.`delete_time` IS NULL AND rx.`creator_id` = {$viewerAdminId})"
);
$qq->whereOrRaw(
"EXISTS (SELECT 1 FROM `{$diagTbl}` dg WHERE dg.`id` = `{$alias}`.`diagnosis_id`"
. " AND dg.`delete_time` IS NULL AND dg.`assistant_id` = {$viewerAdminId})"
);
});
} else {
$q->where(function ($qq) use ($alias, $diagTbl, $viewerAdminId): void {
$qq->where("{$alias}.creator_id", $viewerAdminId);
$qq->whereOrRaw(
"EXISTS (SELECT 1 FROM `{$diagTbl}` dg WHERE dg.`id` = `{$alias}`.`diagnosis_id`"
. " AND dg.`delete_time` IS NULL AND dg.`assistant_id` = {$viewerAdminId})"
);
});
$q->where("{$alias}.creator_id", $viewerAdminId);
}
if ($allowExplicitAssistantVisibility) {
$q->whereOr("{$alias}.creator_id", $explicitAssistant);
$q->whereOrRaw(
"EXISTS (SELECT 1 FROM `{$diagTbl}` dg WHERE dg.`id` = `{$alias}`.`diagnosis_id`"
. " AND dg.`delete_time` IS NULL AND dg.`assistant_id` = {$explicitAssistant})"
);
}
});
@@ -399,7 +360,7 @@ class PrescriptionOrderLogic
}
/**
* 列表数据域:创建人 ∈ 可见 或 诊单医助 ∈ 可见
* 列表数据域:订单创建人 ∈ 可见 admin
*/
private static function applyCommissionOrderDataScope(
Query $query,
@@ -419,15 +380,7 @@ class PrescriptionOrderLogic
return;
}
$diagTbl = (new Diagnosis())->getTable();
$inList = implode(',', array_map('intval', $ids));
$query->where(function ($q) use ($alias, $diagTbl, $inList): void {
$q->whereIn("{$alias}.creator_id", explode(',', $inList));
$q->whereOrRaw(
"EXISTS (SELECT 1 FROM `{$diagTbl}` dg WHERE dg.`id` = `{$alias}`.`diagnosis_id` "
. "AND dg.`delete_time` IS NULL AND dg.`assistant_id` IN ({$inList}))"
);
});
$query->whereIn("{$alias}.creator_id", $ids);
}
/**
@@ -1437,6 +1390,16 @@ class PrescriptionOrderLogic
return false;
}
if (
(int) $order->creator_id === $adminId
&& (int) $order->prescription_audit_status === 1
&& (int) $order->payment_slip_audit_status === 1
&& !self::canSeeAllPrescriptionOrders($adminInfo)
) {
self::$error = '处方与支付单均已审核通过,创建人不可再编辑';
return false;
}
$fs = (int) $order->fulfillment_status;
if ($fs === 3 || $fs === 4) {
self::$error = '已完成或已取消的订单不可编辑';