From 13ee1370ac2b0188eb5f0379e232fbb2f5464025 Mon Sep 17 00:00:00 2001 From: sa0ChunLuyu Date: Sat, 1 Aug 2026 01:31:28 +0800 Subject: [PATCH] =?UTF-8?q?ROC=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/API/His/HisController.php | 62 ++++++++++++++++++- .../API/Third/CSharpController.php | 16 +---- .../Controllers/API/Third/PacsController.php | 26 ++------ .../Controllers/API/Third/YiJiController.php | 52 +++++----------- .../Services/Admin/YeWu/PlanListService.php | 26 +++----- 5 files changed, 90 insertions(+), 92 deletions(-) diff --git a/Laravel/app/Http/Controllers/API/His/HisController.php b/Laravel/app/Http/Controllers/API/His/HisController.php index eda5081..76fa8cf 100644 --- a/Laravel/app/Http/Controllers/API/His/HisController.php +++ b/Laravel/app/Http/Controllers/API/His/HisController.php @@ -124,8 +124,8 @@ public static function GetApplyDetail($visitSqNo, $requestNo, $visitTypeCode, $t $visitTypeCode = $patientHisTypeMap[$visitTypeCode] ?? '09'; } - // ROC 查询用 visitTypeCode 归一:门诊/急诊/体检 -> 01,住院 -> 03 - $rocVisitTypeCode = in_array($visitTypeCode, ['01', '02', '04']) ? '01' : '03'; + // ROC 查询用 visitTypeCode 归一:门诊/急诊 -> 01,住院 -> 03,体检 -> 04,其他 -> 03 + $rocVisitTypeCode = in_array($visitTypeCode, ['01', '02']) ? '01' : (in_array($visitTypeCode, ['03', '04']) ? $visitTypeCode : '03'); // 2. 查缓存表 $cached = DB::table('s_apply_detail_cache') @@ -209,6 +209,64 @@ public static function RequestLog($url, $post_data, $mark, $code = 0) self::$request->save(); } + /** + * 根据 termCode 更新缓存中对应检查项目的执行科室 + * 静默执行,异常不影响调用方 + */ + public static function UpdateApplyDetailCache($visitSqNo, $requestNo, $visitTypeCode, $type, $termCode, $execDeptCode, $execDeptName) + { + try { + // 1. 归一化 visitTypeCode(与 GetApplyDetail 一致) + if ($type === '本地') { + $patientHisTypeMap = [0 => '03', 1 => '01', 2 => '02', 3 => '04']; + $visitTypeCode = $patientHisTypeMap[$visitTypeCode] ?? '09'; + } + $rocVisitTypeCode = in_array($visitTypeCode, ['01', '02']) ? '01' : (in_array($visitTypeCode, ['03', '04']) ? $visitTypeCode : '03'); + + // 2. 查缓存记录 + $cached = DB::table('s_apply_detail_cache') + ->where('visit_sq_no', $visitSqNo) + ->where('request_no', $requestNo) + ->where('visit_type_code', $rocVisitTypeCode) + ->first(); + + if (!$cached) { + return; + } + + // 3. 解码 raw_data + $data = json_decode($cached->raw_data, true); + if (empty($data)) { + return; + } + + // 4. 遍历所有 data[] 的 itemList,按 termCode 匹配并更新 + $updated = false; + foreach ($data as &$applyDetail) { + if (!empty($applyDetail['itemList']) && is_array($applyDetail['itemList'])) { + foreach ($applyDetail['itemList'] as &$item) { + if (($item['termCode'] ?? '') == $termCode) { + $item['execDeptCode'] = $execDeptCode; + $item['execDeptName'] = $execDeptName; + $updated = true; + } + } + unset($item); + } + } + unset($applyDetail); + + // 5. 写回缓存 + if ($updated) { + DB::table('s_apply_detail_cache') + ->where('id', $cached->id) + ->update(['raw_data' => json_encode($data, JSON_UNESCAPED_UNICODE)]); + } + } catch (\Exception $e) { + // 静默兜底,不影响调用方 + } + } + public static function CheckTableName() { $table_name = 'zz_peis_log_' . date('ym'); diff --git a/Laravel/app/Http/Controllers/API/Third/CSharpController.php b/Laravel/app/Http/Controllers/API/Third/CSharpController.php index 01d1bce..d276675 100644 --- a/Laravel/app/Http/Controllers/API/Third/CSharpController.php +++ b/Laravel/app/Http/Controllers/API/Third/CSharpController.php @@ -46,22 +46,8 @@ public function SaveApply($orderNo) } if ($entrust) { //查询his获取检查申请单 - $patientHisTypeMap = [ - 0 => '03', // I - 住院 - 1 => '01', // O - 门诊 - 2 => '02', // E - 急诊 - 3 => '04', // H - 体检 - ]; - $sendHisData = [ - 'visitSqNo' => $entrust->episodeid, - 'requestNo' => $entrust->app_num, - 'visitTypeCode' => $patientHisTypeMap[$entrust->patient_type], -// 'orderStatus'=>1 - 'feeFlag' => $entrust->is_pay == 0 ? 0 : 1, // 住院=0,其他=1 - ]; $hisInfo=[]; - $His = new HisController(); - $res = $His::Get("查询检查申请单", $sendHisData); + $res = HisController::GetApplyDetail($entrust->episodeid, $entrust->app_num, $entrust->patient_type, '本地'); if ($res['code'] == 200) { $res_data = $res['data']; foreach ($res_data as $data_k => $data_v) { diff --git a/Laravel/app/Http/Controllers/API/Third/PacsController.php b/Laravel/app/Http/Controllers/API/Third/PacsController.php index 06135f1..ae38df6 100644 --- a/Laravel/app/Http/Controllers/API/Third/PacsController.php +++ b/Laravel/app/Http/Controllers/API/Third/PacsController.php @@ -103,8 +103,6 @@ public function GetEntrustInfo(){ - $His = new HisController(); - foreach ($entrust_list as $entrust) { $entrust->reservation_sources_name=null; $source = null; @@ -161,29 +159,15 @@ public function GetEntrustInfo(){ $entrust->info['scheduleName'] = (string)$source->department_resources_name; } - $patientHisTypeMap = [ - 0 => '03', // I - 住院 - 1 => '01', // O - 门诊 - 2 => '02', // E - 急诊 - 3 => '04', // H - 体检 - ]; - $sendHisData = [ - 'visitSqNo' => $entrust->episodeid, - 'requestNo' => $entrust->app_num, - 'visitTypeCode' => $patientHisTypeMap[$entrust->patient_type], - 'feeFlag' => $entrust->is_pay == 0 ? 0 : 1, // 住院=0,其他=1 - ]; $entrust->requestTypeCode=''; $entrust->requestTypeName=''; $entrust->orderDeptCode=''; - $res = $His::Get("查询检查申请单", $sendHisData); + $res = HisController::GetApplyDetail($entrust->episodeid, $entrust->app_num, $entrust->patient_type, '本地'); if ($res['code'] == 200) { - $res_data = $res['data']; - foreach ($res_data as $data_k => $data_v) { - $hisInfo=$data_v; - $entrust->requestTypeCode=$hisInfo['requestTypeCode']; - $entrust->requestTypeName=$hisInfo['requestTypeName']; - $entrust->orderDeptCode=$hisInfo['orderDeptCode']; + foreach ($res['data'] as $data_v) { + $entrust->requestTypeCode=$data_v['requestTypeCode']; + $entrust->requestTypeName=$data_v['requestTypeName']; + $entrust->orderDeptCode=$data_v['orderDeptCode']; } } } diff --git a/Laravel/app/Http/Controllers/API/Third/YiJiController.php b/Laravel/app/Http/Controllers/API/Third/YiJiController.php index 0200d9a..0050219 100644 --- a/Laravel/app/Http/Controllers/API/Third/YiJiController.php +++ b/Laravel/app/Http/Controllers/API/Third/YiJiController.php @@ -39,18 +39,7 @@ public function CheckAppointment() } foreach ($requestNoList as $requestNo) { //1.查询his,获取申请单全部检查项目 - $data = [ - 'visitSqNo' => $visitSqNo, - 'requestNo' => $requestNo, - 'visitTypeCode' => $visitTypeCode, - 'feeFlag' => 0, - ]; - - $debug_roc_url = 'http://192.168.80.39:7801/roc/order-service/api/v1/apply/pacs/apply/create/query'; - $debug_roc_params = $data; - - $His = new HisController(); - $res = $His::Get("查询检查申请单", $data); + $res = HisController::GetApplyDetail($visitSqNo, $requestNo, $visitTypeCode, 'HIS'); $debug_hisResponse = $res; if ($res['code'] == 200) { $res_data = $res['data']; @@ -223,8 +212,6 @@ public function CheckAppointment() if ($dev === 1) { $data['debug_termCodes'] = $termCodes; $data['debug_hisResponse'] = $debug_hisResponse ?? []; - $data['debug_roc_url'] = $debug_roc_url ?? ''; - $data['debug_roc_params'] = $debug_roc_params ?? []; } return \Yz::JsonReturn(true, '查询成功', $data); } catch (\Exception $e) { @@ -269,20 +256,16 @@ public function CheckAppointmentTest() ], ]; - // 1. 调用 HIS 接口查询申请单 - $data = [ - 'visitSqNo' => $sList->episodeid, - 'requestNo' => $sList->app_num, - 'visitTypeCode' => $visitTypeCode, - 'feeFlag' => 0, - ]; - - $His = new HisController(); - $hisRes = $His::Get('查询检查申请单', $data); + // 1. 调用 HIS 接口查询申请单(走缓存) + $hisRes = HisController::GetApplyDetail($sList->episodeid, $sList->app_num, $sList->patient_type, '本地'); $result['his_query'] = [ - 'params' => $data, + 'params' => [ + 'visitSqNo' => $sList->episodeid, + 'requestNo' => $sList->app_num, + 'visitTypeCode' => $visitTypeCode, + ], 'response' => $hisRes, - 'success' => ($hisRes['code'] == 200), + 'success' => ($hisRes['code'] == 200 && !empty($hisRes['data'])), ]; // 2. 检查科室是否参与预约 @@ -451,21 +434,18 @@ public function TestHisCallbackParams() ]; $visitTypeCode = $patientHisTypeMap[$sList->patient_type] ?? '09'; - $hisQueryData = [ - 'visitSqNo' => $sList->episodeid, - 'requestNo' => $sList->app_num, - 'visitTypeCode' => $visitTypeCode, - 'feeFlag' => 0, - ]; - $result['his_query'] = [ - 'params' => $hisQueryData, + 'params' => [ + 'visitSqNo' => $sList->episodeid, + 'requestNo' => $sList->app_num, + 'visitTypeCode' => $visitTypeCode, + ], ]; try { - $hisRes = HisController::Get('查询检查申请单', $hisQueryData); + $hisRes = HisController::GetApplyDetail($sList->episodeid, $sList->app_num, $sList->patient_type, '本地'); $result['his_query']['response'] = $hisRes; - $result['his_query']['success'] = ($hisRes['code'] == 200); + $result['his_query']['success'] = ($hisRes['code'] == 200 && !empty($hisRes['data'])); if ($hisRes['code'] == 200 && !empty($hisRes['data'])) { $hisData = $hisRes['data'][0] ?? null; diff --git a/Laravel/app/Services/Admin/YeWu/PlanListService.php b/Laravel/app/Services/Admin/YeWu/PlanListService.php index 5b8108d..1da3d6b 100644 --- a/Laravel/app/Services/Admin/YeWu/PlanListService.php +++ b/Laravel/app/Services/Admin/YeWu/PlanListService.php @@ -1933,28 +1933,12 @@ private function notifyHisAfterYuYue($oldMainInfos, $planInfo) return; } - // patient_type 到 visitTypeCode 映射 - $patientHisTypeMap = [ - 0 => '03', // 住院 - 1 => '01', // 门诊 - 2 => '02', // 急诊 - 3 => '04', // 体检 - ]; - - // 3. 遍历每组,调 HIS 查询接口获取最新数据 + // 3. 遍历每组,调 GetApplyDetail 获取申请单数据(带缓存) foreach ($grouped as $appNum => $group) { $visitSqNo = $group['episodeid']; - $visitTypeCode = $patientHisTypeMap[$group['patient_type']] ?? '09'; - - $hisQueryData = [ - 'visitSqNo' => $visitSqNo, - 'requestNo' => $appNum, - 'visitTypeCode' => $visitTypeCode, - 'feeFlag' => 0, - ]; try { - $hisRes = HisController::Get('查询检查申请单', $hisQueryData); + $hisRes = HisController::GetApplyDetail($visitSqNo, $appNum, $group['patient_type'], '本地'); } catch (\Exception $e) { Log::warning('HIS 查询申请单异常', [ 'app_num' => $appNum, @@ -2047,6 +2031,12 @@ private function notifyHisAfterYuYue($oldMainInfos, $planInfo) 'new_implement_department' => $execDeptName, ], JSON_UNESCAPED_UNICODE), ]); + + // 同步更新 ROC 缓存中对应检查项目的执行科室 + HisController::UpdateApplyDetailCache( + $visitSqNo, $appNum, $group['patient_type'], '本地', + $entrustCode, $execDeptCode, $execDeptName + ); } } catch (\Exception $e) { Log::error('HIS 回写接口请求异常', [