跟踪备注

This commit is contained in:
2026-05-05 17:52:35 +08:00
parent 919d0f856e
commit c830008dfc
14 changed files with 475 additions and 5 deletions
@@ -13,6 +13,7 @@ use app\api\logic\ChatNotifyLogic;
use app\adminapi\logic\tcm\PrescriptionLogic;
use app\adminapi\logic\tcm\DiagnosisLogic;
use app\adminapi\logic\tcm\BloodRecordLogic;
use app\adminapi\logic\tcm\TrackingNoteLogic;
use app\adminapi\logic\doctor\DoctorNoteLogic;
use app\common\model\tcm\Prescription;
use app\common\service\wechat\WechatWorkAppMessageService;
@@ -549,10 +550,16 @@ class AppointmentLogic extends BaseLogic
? DoctorNoteLogic::getByDiagnosis($diagnosisId)
: [];
// 7.1) 跟踪备注
$trackingNotes = $diagnosisId > 0
? TrackingNoteLogic::getByDiagnosis($diagnosisId)
: [];
return [
'appointment' => $appointment,
'diagnosis' => $diagnosis,
'doctor_notes' => $doctorNotes,
'appointment' => $appointment,
'diagnosis' => $diagnosis,
'doctor_notes' => $doctorNotes,
'tracking_notes' => $trackingNotes,
];
}
@@ -28,6 +28,7 @@ use app\common\model\auth\Admin;
use app\common\model\auth\AdminRole;
use app\adminapi\logic\doctor\DoctorNoteLogic;
use app\adminapi\logic\doctor\AppointmentLogic;
use app\adminapi\logic\tcm\TrackingNoteLogic;
use app\common\service\FileService;
use app\common\service\DataScope\DataScopeService;
use think\facade\Db;
@@ -3403,6 +3404,9 @@ class DiagnosisLogic extends BaseLogic
// 5) 医生备注
$doctorNotes = DoctorNoteLogic::getByDiagnosis($diagnosisId);
// 5.1) 跟踪备注(只读展示,按 note_date DESC
$trackingNotes = TrackingNoteLogic::getByDiagnosis($diagnosisId);
// 6) 未服务天数(与 T3 列同口径)
$maxBloodTs = BloodRecord::where('diagnosis_id', $diagnosisId)
->max('record_date');
@@ -3414,6 +3418,7 @@ class DiagnosisLogic extends BaseLogic
'appointment' => $appointment,
'diagnosis' => $diagnosis,
'doctor_notes' => $doctorNotes,
'tracking_notes' => $trackingNotes,
'unserved_days' => $unservedDays,
'last_blood_record_at' => $lastBloodRecordAt,
];
@@ -0,0 +1,95 @@
<?php
namespace app\adminapi\logic\tcm;
use app\common\logic\BaseLogic;
use app\common\model\tcm\TrackingNote;
/**
* 诊单跟踪备注 Logic
*
* - 按 diagnosis_id + 当天 find-or-create
* - 多次追加 content(换行分隔,带 [HH:MM] 前缀)
* - 不涉及附件(与医生备注 DoctorNoteLogic 不同)
*/
class TrackingNoteLogic extends BaseLogic
{
/**
* 追加跟踪备注(按天合并)
*
* @param array $params diagnosis_id (int)、admin_id (int)、content (string)
* @return bool
*/
public static function addOrAppend(array $params): bool
{
try {
$diagnosisId = (int) ($params['diagnosis_id'] ?? 0);
$adminId = (int) ($params['admin_id'] ?? 0);
$newContent = trim((string) ($params['content'] ?? ''));
if ($diagnosisId <= 0) {
self::setError('诊单ID缺失');
return false;
}
if ($newContent === '') {
self::setError('备注内容不能为空');
return false;
}
$today = date('Y-m-d');
$time = date('H:i');
$line = "[{$time}] {$newContent}";
$existing = TrackingNote::where('diagnosis_id', $diagnosisId)
->where('note_date', $today)
->whereNull('delete_time')
->find();
if ($existing) {
$prev = trim((string) ($existing->content ?? ''));
$existing->content = $prev !== '' ? ($prev . "\n" . $line) : $line;
$existing->save();
} else {
TrackingNote::create([
'diagnosis_id' => $diagnosisId,
'admin_id' => $adminId,
'note_date' => $today,
'content' => $line,
]);
}
return true;
} catch (\Exception $e) {
self::setError($e->getMessage());
return false;
}
}
/**
* 按 diagnosis_id 获取跟踪备注列表(note_date DESC
*
* @param int $diagnosisId
* @param int $limit 最近 N 天
* @return array
*/
public static function getByDiagnosis(int $diagnosisId, int $limit = 60): array
{
try {
if ($diagnosisId <= 0) {
return [];
}
$records = TrackingNote::where('diagnosis_id', $diagnosisId)
->whereNull('delete_time')
->order('note_date', 'desc')
->limit($limit)
->select()
->toArray();
return $records;
} catch (\Exception $e) {
self::setError($e->getMessage());
return [];
}
}
}