Merge branch 'master' of https://gitee.com/v_cms/zyt
This commit is contained in:
@@ -20,6 +20,8 @@ use app\common\model\tcm\DiagnosisGuahaoLog;
|
||||
use app\common\model\tcm\DiagnosisAssignLog;
|
||||
use app\common\model\tcm\ImChatMessage;
|
||||
use app\common\model\DiagnosisViewRecord;
|
||||
use app\adminapi\logic\doctor\DoctorNoteLogic;
|
||||
use app\common\service\FileService;
|
||||
use think\facade\Db;
|
||||
/**
|
||||
* 中医辨房病因诊单逻辑
|
||||
@@ -79,23 +81,19 @@ class DiagnosisLogic extends BaseLogic
|
||||
}
|
||||
}
|
||||
|
||||
// 处理舌苔照片(JSON数组)
|
||||
if (isset($params['tongue_images']) && is_array($params['tongue_images'])) {
|
||||
$params['tongue_images'] = json_encode($params['tongue_images'], JSON_UNESCAPED_UNICODE);
|
||||
}
|
||||
|
||||
// 处理检查报告(JSON数组)
|
||||
if (isset($params['report_files']) && is_array($params['report_files'])) {
|
||||
$params['report_files'] = json_encode($params['report_files'], JSON_UNESCAPED_UNICODE);
|
||||
}
|
||||
|
||||
// 图片字段迁移至 doctor_note,从 params 中提取后再写入备注表
|
||||
$newTongueImages = isset($params['tongue_images']) && is_array($params['tongue_images'])
|
||||
? $params['tongue_images'] : [];
|
||||
$newReportFiles = isset($params['report_files']) && is_array($params['report_files'])
|
||||
? $params['report_files'] : [];
|
||||
unset($params['tongue_images'], $params['report_files']);
|
||||
|
||||
// 处理诊断日期
|
||||
if (isset($params['diagnosis_date'])) {
|
||||
$params['diagnosis_date'] = strtotime($params['diagnosis_date']);
|
||||
}
|
||||
|
||||
// 表未增加 admin_id 列时勿写入,避免 SQL 报错(见 sql/1.9.20260421/add_tcm_diagnosis_admin_id.sql)
|
||||
// 注意:Model::getConnection() 在 think-orm 中返回连接名(string),须用 Db 查询对象取字段
|
||||
if (array_key_exists('admin_id', $params)) {
|
||||
$fieldNames = Db::name('tcm_diagnosis')->getTableFields();
|
||||
if (! is_array($fieldNames) || ! in_array('admin_id', $fieldNames, true)) {
|
||||
@@ -104,10 +102,19 @@ class DiagnosisLogic extends BaseLogic
|
||||
}
|
||||
|
||||
$model = Diagnosis::create($params);
|
||||
|
||||
|
||||
// 图片写入 doctor_note 表
|
||||
if (!empty($newTongueImages) || !empty($newReportFiles)) {
|
||||
DoctorNoteLogic::addOrAppend([
|
||||
'diagnosis_id' => (int) $model->id,
|
||||
'tongue_images' => $newTongueImages,
|
||||
'report_files' => $newReportFiles,
|
||||
]);
|
||||
}
|
||||
|
||||
// 自动为患者创建 TRTC 账号
|
||||
self::createPatientTrtcAccount($model->id);
|
||||
|
||||
|
||||
return $model->id;
|
||||
} catch (\Exception $e) {
|
||||
self::setError($e->getMessage());
|
||||
@@ -178,29 +185,22 @@ class DiagnosisLogic extends BaseLogic
|
||||
}
|
||||
}
|
||||
|
||||
// 处理舌苔照片(JSON数组)
|
||||
if (isset($params['tongue_images']) && is_array($params['tongue_images'])) {
|
||||
$params['tongue_images'] = json_encode($params['tongue_images'], JSON_UNESCAPED_UNICODE);
|
||||
}
|
||||
|
||||
// 处理检查报告(JSON数组)
|
||||
if (isset($params['report_files']) && is_array($params['report_files'])) {
|
||||
$params['report_files'] = json_encode($params['report_files'], JSON_UNESCAPED_UNICODE);
|
||||
}
|
||||
|
||||
// 图片字段已迁移至 doctor_note 表管理,不再写入 tcm_diagnosis
|
||||
unset($params['tongue_images'], $params['report_files']);
|
||||
|
||||
// 处理诊断日期
|
||||
if (isset($params['diagnosis_date'])) {
|
||||
$params['diagnosis_date'] = strtotime($params['diagnosis_date']);
|
||||
}
|
||||
|
||||
Diagnosis::update($params);
|
||||
|
||||
|
||||
// 如果是编辑,也确保患者有 TRTC 账号
|
||||
$diagnosis = Diagnosis::find($params['id']);
|
||||
if ($diagnosis) {
|
||||
self::createPatientTrtcAccount($diagnosis->patient_id);
|
||||
}
|
||||
|
||||
|
||||
return true;
|
||||
} catch (\Exception $e) {
|
||||
self::setError($e->getMessage());
|
||||
@@ -256,60 +256,36 @@ class DiagnosisLogic extends BaseLogic
|
||||
}
|
||||
|
||||
|
||||
if (!empty($diagnosis['tongue_images'])) {
|
||||
// 先尝试 JSON 解析(兼容旧数据)
|
||||
$files = json_decode($diagnosis['tongue_images'], true);
|
||||
if (is_array($files)) {
|
||||
$diagnosis['tongue_images'] = $files;
|
||||
} else {
|
||||
// JSON 解析失败则按逗号分割
|
||||
$diagnosis['tongue_images'] = array_filter(explode(',', $diagnosis['tongue_images'])) ?: [];
|
||||
}
|
||||
|
||||
// 为没有 http 前缀的图片添加域名
|
||||
$domain = request()->domain();
|
||||
$diagnosis['tongue_images'] = array_map(function($url) use ($domain) {
|
||||
if (empty($url)) {
|
||||
return $url;
|
||||
// 从 doctor_note 聚合图片(已迁移至备注表统一管理)
|
||||
$noteImages = DoctorNoteLogic::getAggregatedImages((int) $diagnosis['id']);
|
||||
if (!empty($noteImages['tongue_images']) || !empty($noteImages['report_files'])) {
|
||||
$diagnosis['tongue_images'] = $noteImages['tongue_images'];
|
||||
$diagnosis['report_files'] = $noteImages['report_files'];
|
||||
} else {
|
||||
// Fallback: 未迁移的旧数据仍从 tcm_diagnosis 读取
|
||||
if (!empty($diagnosis['tongue_images'])) {
|
||||
$files = json_decode($diagnosis['tongue_images'], true);
|
||||
if (!is_array($files)) {
|
||||
$files = array_filter(explode(',', $diagnosis['tongue_images'])) ?: [];
|
||||
}
|
||||
$diagnosis['tongue_images'] = array_map(function($url) {
|
||||
return empty($url) ? $url : FileService::getFileUrl($url);
|
||||
}, $files);
|
||||
} else {
|
||||
$diagnosis['tongue_images'] = [];
|
||||
}
|
||||
if (!empty($diagnosis['report_files'])) {
|
||||
$files = json_decode($diagnosis['report_files'], true);
|
||||
if (!is_array($files)) {
|
||||
$files = array_filter(explode(',', $diagnosis['report_files'])) ?: [];
|
||||
}
|
||||
$diagnosis['report_files'] = array_map(function($url) {
|
||||
return empty($url) ? $url : FileService::getFileUrl($url);
|
||||
}, $files);
|
||||
} else {
|
||||
$diagnosis['report_files'] = [];
|
||||
}
|
||||
}
|
||||
// 如果已经包含 http:// 或 https://,则跳过
|
||||
if (stripos($url, 'http://') === 0 || stripos($url, 'https://') === 0) {
|
||||
return $url;
|
||||
}
|
||||
// 添加域名前缀
|
||||
return $domain .'/'. $url;
|
||||
}, $diagnosis['tongue_images']);
|
||||
} else {
|
||||
$diagnosis['tongue_images'] = [];
|
||||
}
|
||||
|
||||
// 处理检查报告(JSON转数组)
|
||||
if (!empty($diagnosis['report_files'])) {
|
||||
// 先尝试 JSON 解析(兼容旧数据)
|
||||
$files = json_decode($diagnosis['report_files'], true);
|
||||
if (is_array($files)) {
|
||||
$diagnosis['report_files'] = $files;
|
||||
} else {
|
||||
// JSON 解析失败则按逗号分割
|
||||
$diagnosis['report_files'] = array_filter(explode(',', $diagnosis['report_files'])) ?: [];
|
||||
}
|
||||
|
||||
// 为没有 http 前缀的文件添加域名
|
||||
$domain = request()->domain();
|
||||
$diagnosis['report_files'] = array_map(function($url) use ($domain) {
|
||||
if (empty($url)) {
|
||||
return $url;
|
||||
}
|
||||
// 如果已经包含 http:// 或 https://,则跳过
|
||||
if (stripos($url, 'http://') === 0 || stripos($url, 'https://') === 0) {
|
||||
return $url;
|
||||
}
|
||||
// 添加域名前缀
|
||||
return $domain . $url;
|
||||
}, $diagnosis['report_files']);
|
||||
} else {
|
||||
$diagnosis['report_files'] = [];
|
||||
}
|
||||
// 处理诊断日期格式
|
||||
if (!empty($diagnosis['diagnosis_date'])) {
|
||||
$diagnosis['diagnosis_date'] = date('Y-m-d', $diagnosis['diagnosis_date']);
|
||||
@@ -2791,12 +2767,13 @@ class DiagnosisLogic extends BaseLogic
|
||||
$params[$field] = implode(',', $params[$field]);
|
||||
}
|
||||
}
|
||||
if (isset($params['tongue_images']) && is_array($params['tongue_images'])) {
|
||||
$params['tongue_images'] = json_encode($params['tongue_images'], JSON_UNESCAPED_UNICODE);
|
||||
}
|
||||
if (isset($params['report_files']) && is_array($params['report_files'])) {
|
||||
$params['report_files'] = json_encode($params['report_files'], JSON_UNESCAPED_UNICODE);
|
||||
}
|
||||
// 图片字段迁移至 doctor_note 表
|
||||
$cardTongueImages = isset($params['tongue_images']) && is_array($params['tongue_images'])
|
||||
? $params['tongue_images'] : [];
|
||||
$cardReportFiles = isset($params['report_files']) && is_array($params['report_files'])
|
||||
? $params['report_files'] : [];
|
||||
unset($params['tongue_images'], $params['report_files']);
|
||||
|
||||
if (isset($params['diagnosis_date'])) {
|
||||
$params['diagnosis_date'] = is_numeric($params['diagnosis_date']) ? $params['diagnosis_date'] : strtotime($params['diagnosis_date']);
|
||||
}
|
||||
@@ -2804,6 +2781,15 @@ class DiagnosisLogic extends BaseLogic
|
||||
$model = Diagnosis::create($params);
|
||||
self::createPatientTrtcAccount($model->patient_id);
|
||||
|
||||
// 图片写入 doctor_note
|
||||
if (!empty($cardTongueImages) || !empty($cardReportFiles)) {
|
||||
DoctorNoteLogic::addOrAppend([
|
||||
'diagnosis_id' => (int) $model->id,
|
||||
'tongue_images' => $cardTongueImages,
|
||||
'report_files' => $cardReportFiles,
|
||||
]);
|
||||
}
|
||||
|
||||
// 关联 diagnosis_view_records,便于用户通过 User::with('diagnosis') 获取就诊卡
|
||||
if ($userId) {
|
||||
$now = time();
|
||||
@@ -2909,8 +2895,6 @@ class DiagnosisLogic extends BaseLogic
|
||||
// 临床信息
|
||||
'symptoms' => $params['symptoms'] ?? '',
|
||||
'tongue_coating' => $params['tongue_coating'] ?? '',
|
||||
'tongue_images' => $params['tongue_images'] ?? '',
|
||||
'report_files' => $params['report_files'] ?? '',
|
||||
'pulse' => $params['pulse'] ?? '',
|
||||
'treatment_principle' => $params['treatment_principle'] ?? '',
|
||||
'prescription' => $params['prescription'] ?? '',
|
||||
@@ -2923,14 +2907,25 @@ class DiagnosisLogic extends BaseLogic
|
||||
if (!empty($params['diagnosis_date'])) {
|
||||
$updateData['diagnosis_date'] = strtotime($params['diagnosis_date']);
|
||||
} elseif (!empty($params['local_hospital_visit_date'])) {
|
||||
// 如果没有diagnosis_date但有local_hospital_visit_date,则使用local_hospital_visit_date
|
||||
$updateData['diagnosis_date'] = strtotime($params['local_hospital_visit_date']);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 执行更新
|
||||
$diagnosis->save($updateData);
|
||||
|
||||
// 图片写入 doctor_note 表
|
||||
$cardTongueImages = isset($params['tongue_images']) && is_array($params['tongue_images'])
|
||||
? $params['tongue_images'] : [];
|
||||
$cardReportFiles = isset($params['report_files']) && is_array($params['report_files'])
|
||||
? $params['report_files'] : [];
|
||||
if (!empty($cardTongueImages) || !empty($cardReportFiles)) {
|
||||
DoctorNoteLogic::addOrAppend([
|
||||
'diagnosis_id' => (int) $diagnosisId,
|
||||
'tongue_images' => $cardTongueImages,
|
||||
'report_files' => $cardReportFiles,
|
||||
]);
|
||||
}
|
||||
|
||||
\think\facade\Log::info('诊单更新成功 - diagnosis_id: ' . $diagnosisId . ', patient_id: ' . $patientId);
|
||||
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user