This commit is contained in:
Your Name
2026-05-08 14:13:19 +08:00
parent 43110e015d
commit 7473a3e03d
9 changed files with 1324 additions and 268 deletions
@@ -883,6 +883,21 @@ class PrescriptionOrderLists extends BaseAdminDataLists implements ListsSearchIn
}
if (isset($this->params['assistant_dept_id']) && $this->params['assistant_dept_id'] !== '' && (int) $this->params['assistant_dept_id'] > 0) {
if ((int) ($this->params['yeji_drawer_match_table_performance'] ?? 0) === 1) {
$rowDeptId = (int) $this->params['assistant_dept_id'];
$adminIds = YejiStatsLogic::collectAdminIdsAttributedToYejiTableRow(
$rowDeptId,
$this->params['dept_ids'] ?? null
);
if ($adminIds === []) {
$query->whereRaw('0 = 1');
return;
}
$this->applyPerformanceAttributionAdminInFilter($query, $adminIds);
return;
}
$rootDeptId = (int) $this->params['assistant_dept_id'];
$deptIds = DeptLogic::getSelfAndDescendantIds($rootDeptId);
$deptIds = array_values(array_filter(array_map('intval', $deptIds), static function (int $id): bool {
@@ -909,6 +924,35 @@ class PrescriptionOrderLists extends BaseAdminDataLists implements ListsSearchIn
}
}
/**
* 业绩看板侧栏:只保留「业绩归属医助」落在给定 admin_id 集合的订单(与 YejiStatsLogic::sqlPerformanceAttributionAdminExpr 一致)。
*
* @param int[] $adminIds
*/
private function applyPerformanceAttributionAdminInFilter($query, array $adminIds): void
{
$adminIds = array_values(array_unique(array_filter(array_map('intval', $adminIds), static function (int $x): bool {
return $x > 0;
})));
if ($adminIds === []) {
$query->whereRaw('0 = 1');
return;
}
$poTbl = (new PrescriptionOrder())->getTable();
$diagTbl = (new Diagnosis())->getTable();
$rxTbl = (new Prescription())->getTable();
$inList = implode(',', $adminIds);
$query->whereRaw(
"EXISTS (SELECT 1 FROM `{$diagTbl}` dg "
. "LEFT JOIN `{$rxTbl}` rx ON rx.`id` = `{$poTbl}`.`prescription_id` AND rx.`delete_time` IS NULL "
. "WHERE dg.`id` = `{$poTbl}`.`diagnosis_id` AND dg.`delete_time` IS NULL AND `{$poTbl}`.`diagnosis_id` > 0 AND "
. '(CASE WHEN dg.`assistant_id` > 0 THEN dg.`assistant_id` '
. "WHEN `{$poTbl}`.`creator_id` > 0 AND (rx.`id` IS NULL OR NOT (`{$poTbl}`.`creator_id` <=> rx.`creator_id`)) THEN `{$poTbl}`.`creator_id` "
. 'ELSE 0 END) IN (' . $inList . '))'
);
}
/**
* 按诊单患者姓名 / 手机号模糊检索(关联 diagnosis_id
*/
File diff suppressed because it is too large Load Diff
@@ -1000,6 +1000,11 @@ class PrescriptionOrderLogic
}
}
$channelDictValue = null;
if ($chSrc !== '' && is_numeric($chSrc)) {
$channelDictValue = (int) $chSrc;
}
return [
'id' => $apptId,
'appointment_date' => (string) ($row['appointment_date'] ?? ''),
@@ -1012,6 +1017,8 @@ class PrescriptionOrderLogic
'doctor_name' => $doctorName,
'channel_source' => $chSrc,
'channel_source_desc' => $chDesc,
/** 字典 type_value=channels 的 value(整型);与业绩看板挂号 channels 收窄、进线统计所用字典为同套 */
'channel_dict_value' => $channelDictValue,
'remark' => (string) ($row['remark'] ?? ''),
];
}