更新bug
This commit is contained in:
@@ -293,20 +293,32 @@ class AppointmentLists extends BaseAdminDataLists implements ListsSearchInterfac
|
||||
$prescribedDiagnosisIds = $rxQ->column('diagnosis_id');
|
||||
$prescribedDiagnosisIds = array_flip($prescribedDiagnosisIds ?: []);
|
||||
}
|
||||
// 当前页预约关联的处方(按 appointment_id,取最新一条):用于「开方/查看」与审核状态
|
||||
// 当前页预约关联的处方(按 appointment_id,优先最新未作废,否则最新一条):
|
||||
// 用于本次挂号的「开方/编辑/查看」与审核状态。
|
||||
$appointmentIds = array_filter(array_map('intval', array_column($lists, 'id')));
|
||||
$rxByAppointmentId = [];
|
||||
$fallbackRxByAppointmentId = [];
|
||||
if (!empty($appointmentIds)) {
|
||||
$rxRows = Prescription::whereIn('appointment_id', $appointmentIds)
|
||||
->whereNull('delete_time')
|
||||
->where('void_status', 0)
|
||||
->order('id', 'desc')
|
||||
->field(['id', 'appointment_id', 'audit_status', 'void_status', 'is_system_auto'])
|
||||
->select()
|
||||
->toArray();
|
||||
foreach ($rxRows as $rx) {
|
||||
$aid = (int) ($rx['appointment_id'] ?? 0);
|
||||
if ($aid > 0 && !isset($rxByAppointmentId[$aid])) {
|
||||
if ($aid <= 0) {
|
||||
continue;
|
||||
}
|
||||
if (!isset($fallbackRxByAppointmentId[$aid])) {
|
||||
$fallbackRxByAppointmentId[$aid] = $rx;
|
||||
}
|
||||
if ((int) ($rx['void_status'] ?? 0) === 0 && !isset($rxByAppointmentId[$aid])) {
|
||||
$rxByAppointmentId[$aid] = $rx;
|
||||
}
|
||||
}
|
||||
foreach ($fallbackRxByAppointmentId as $aid => $rx) {
|
||||
if (!isset($rxByAppointmentId[$aid])) {
|
||||
$rxByAppointmentId[$aid] = $rx;
|
||||
}
|
||||
}
|
||||
@@ -353,6 +365,8 @@ class AppointmentLists extends BaseAdminDataLists implements ListsSearchInterfac
|
||||
|
||||
$apptId = (int) ($item['id'] ?? 0);
|
||||
$apptRx = $rxByAppointmentId[$apptId] ?? null;
|
||||
$item['current_has_prescription'] = $apptRx !== null ? 1 : 0;
|
||||
$item['current_prescription_id'] = $apptRx !== null ? (int) ($apptRx['id'] ?? 0) : 0;
|
||||
$item['prescription_audit_status'] = $apptRx !== null ? (int) ($apptRx['audit_status'] ?? -1) : -1;
|
||||
$item['prescription_void_status'] = $apptRx !== null ? (int) ($apptRx['void_status'] ?? 0) : 0;
|
||||
$item['prescription_is_system_auto'] = $apptRx !== null ? (int) ($apptRx['is_system_auto'] ?? 0) : 0;
|
||||
|
||||
@@ -282,17 +282,51 @@ class DiagnosisLists extends BaseAdminDataLists implements ListsSearchInterface
|
||||
|
||||
// 关联是否开方:诊单是否有处方记录
|
||||
$diagnosisIds = array_column($lists, 'id');
|
||||
$prescriptionMap = [];
|
||||
if (!empty($diagnosisIds)) {
|
||||
$prescriptionTbl = (new Prescription())->getTable();
|
||||
$prescribedIds = Prescription::whereIn('diagnosis_id', $diagnosisIds)
|
||||
->whereNull('delete_time')
|
||||
->column('diagnosis_id');
|
||||
$prescriptionMap = array_fill_keys($prescribedIds, 1);
|
||||
}
|
||||
foreach ($lists as &$item) {
|
||||
$item['has_prescription'] = isset($prescriptionMap[$item['id']]) ? 1 : 0;
|
||||
}
|
||||
$prescriptionMap = [];
|
||||
if (!empty($diagnosisIds)) {
|
||||
$prescribedIds = Prescription::whereIn('diagnosis_id', $diagnosisIds)
|
||||
->whereNull('delete_time')
|
||||
->column('diagnosis_id');
|
||||
$prescriptionMap = array_fill_keys($prescribedIds, 1);
|
||||
}
|
||||
foreach ($lists as &$item) {
|
||||
$item['has_prescription'] = isset($prescriptionMap[$item['id']]) ? 1 : 0;
|
||||
}
|
||||
|
||||
// 当前操作必须只认当前挂号的处方。has_prescription 继续表示诊单历史上曾开方,
|
||||
// 不能再用它驱动本次挂号的“开方/编辑/查看”按钮。
|
||||
$currentRxByAppointment = [];
|
||||
$fallbackRxByAppointment = [];
|
||||
$appointmentIds = array_values(array_filter(array_unique(array_map(
|
||||
'intval',
|
||||
array_column($lists, 'appointment_id')
|
||||
))));
|
||||
if ($appointmentIds !== []) {
|
||||
$currentRxRows = Prescription::whereIn('appointment_id', $appointmentIds)
|
||||
->whereNull('delete_time')
|
||||
->field(['id', 'appointment_id', 'audit_status', 'void_status'])
|
||||
->order('id', 'desc')
|
||||
->select()
|
||||
->toArray();
|
||||
foreach ($currentRxRows as $rx) {
|
||||
$appointmentId = (int) ($rx['appointment_id'] ?? 0);
|
||||
if ($appointmentId <= 0) {
|
||||
continue;
|
||||
}
|
||||
if (!isset($fallbackRxByAppointment[$appointmentId])) {
|
||||
$fallbackRxByAppointment[$appointmentId] = $rx;
|
||||
}
|
||||
if ((int) ($rx['void_status'] ?? 0) === 0
|
||||
&& !isset($currentRxByAppointment[$appointmentId])) {
|
||||
$currentRxByAppointment[$appointmentId] = $rx;
|
||||
}
|
||||
}
|
||||
foreach ($fallbackRxByAppointment as $appointmentId => $rx) {
|
||||
if (!isset($currentRxByAppointment[$appointmentId])) {
|
||||
$currentRxByAppointment[$appointmentId] = $rx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 复诊展示:业务上「已开方」即算有复诊,取该诊单下最新一条处方的时间与医师(优先未作废)
|
||||
$followupByDiag = [];
|
||||
@@ -346,17 +380,21 @@ class DiagnosisLists extends BaseAdminDataLists implements ListsSearchInterface
|
||||
];
|
||||
}
|
||||
}
|
||||
foreach ($lists as &$item) {
|
||||
$did = (int) $item['id'];
|
||||
$fu = $followupByDiag[$did] ?? null;
|
||||
$item['followup_time_text'] = ($item['has_prescription'] && $fu) ? ($fu['time_text'] ?? '') : '';
|
||||
$item['followup_doctor_name'] = ($item['has_prescription'] && $fu) ? ($fu['doctor_name'] ?? '—') : '';
|
||||
$item['followup_rx_voided'] = ($item['has_prescription'] && $fu && !empty($fu['voided'])) ? 1 : 0;
|
||||
$item['prescription_audit_status'] = ($item['has_prescription'] && $fu) ? (int) ($fu['audit_status'] ?? -1) : -1;
|
||||
$item['prescription_void_status'] = ($item['has_prescription'] && $fu) ? (int) ($fu['void_status'] ?? 0) : 0;
|
||||
// 开方次数即复诊次数:1 张处方 = 第 1 次复诊,以此类推
|
||||
$item['followup_prescription_count'] = (int) ($rxCountByDiag[$did] ?? 0);
|
||||
}
|
||||
foreach ($lists as &$item) {
|
||||
$did = (int) $item['id'];
|
||||
$fu = $followupByDiag[$did] ?? null;
|
||||
$currentAppointmentId = (int) ($item['appointment_id'] ?? 0);
|
||||
$currentRx = $currentRxByAppointment[$currentAppointmentId] ?? null;
|
||||
$item['followup_time_text'] = ($item['has_prescription'] && $fu) ? ($fu['time_text'] ?? '') : '';
|
||||
$item['followup_doctor_name'] = ($item['has_prescription'] && $fu) ? ($fu['doctor_name'] ?? '—') : '';
|
||||
$item['followup_rx_voided'] = ($item['has_prescription'] && $fu && !empty($fu['voided'])) ? 1 : 0;
|
||||
$item['current_has_prescription'] = $currentRx !== null ? 1 : 0;
|
||||
$item['current_prescription_id'] = $currentRx !== null ? (int) ($currentRx['id'] ?? 0) : 0;
|
||||
$item['prescription_audit_status'] = $currentRx !== null ? (int) ($currentRx['audit_status'] ?? -1) : -1;
|
||||
$item['prescription_void_status'] = $currentRx !== null ? (int) ($currentRx['void_status'] ?? 0) : 0;
|
||||
// 开方次数即复诊次数:1 张处方 = 第 1 次复诊,以此类推
|
||||
$item['followup_prescription_count'] = (int) ($rxCountByDiag[$did] ?? 0);
|
||||
}
|
||||
|
||||
// 最近一条通话记录状态(列表行展示:通话中 / 已结束等)
|
||||
$latestCallByDiag = [];
|
||||
|
||||
Reference in New Issue
Block a user