diff --git a/Laravel/app/Http/Controllers/API/His/HisController.php b/Laravel/app/Http/Controllers/API/His/HisController.php index 8f50d97..eda5081 100644 --- a/Laravel/app/Http/Controllers/API/His/HisController.php +++ b/Laravel/app/Http/Controllers/API/His/HisController.php @@ -108,6 +108,89 @@ public static function Post($url_path, $data) } } + /** + * 获取申请单详情(带缓存) + * @param string $visitSqNo 就诊流水号 + * @param string $requestNo 申请单号 + * @param string|int $visitTypeCode 就诊类型代码 + * @param string $type 入参类型:本地|HIS + * @return array {"code":200,"msg":"操作成功!","data":[...]} + */ + public static function GetApplyDetail($visitSqNo, $requestNo, $visitTypeCode, $type = 'HIS') + { + // 1. 参数归一:本地 patient_type -> HIS visitTypeCode + if ($type === '本地') { + $patientHisTypeMap = [0 => '03', 1 => '01', 2 => '02', 3 => '04']; + $visitTypeCode = $patientHisTypeMap[$visitTypeCode] ?? '09'; + } + + // ROC 查询用 visitTypeCode 归一:门诊/急诊/体检 -> 01,住院 -> 03 + $rocVisitTypeCode = in_array($visitTypeCode, ['01', '02', '04']) ? '01' : '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 [ + 'code' => 200, + 'msg' => '操作成功!', + 'data' => json_decode($cached->raw_data, true), + ]; + } + + // 3. 请求 ROC(3 轮,每轮 try-catch) + $queries = [ + ['feeFlag', '0'], + ['feeFlag', '1'], + ['orderStatus', '1'], + ]; + + foreach ($queries as [$paramKey, $paramValue]) { + $queryData = [ + 'visitSqNo' => $visitSqNo, + 'requestNo' => $requestNo, + 'visitTypeCode' => $rocVisitTypeCode, + $paramKey => $paramValue, + ]; + + try { + $res = self::Get('查询检查申请单', $queryData); + } catch (\Exception $e) { + // 接口异常,继续下一轮 + continue; + } + + if ($res['code'] == 200 && !empty($res['data'])) { + // 4. 写缓存 + $queryFeeFlag = $paramKey === 'feeFlag' ? $paramValue : 'orderStatus=1'; + DB::table('s_apply_detail_cache')->insert([ + 'visit_sq_no' => $visitSqNo, + 'request_no' => $requestNo, + 'visit_type_code' => $rocVisitTypeCode, + 'raw_data' => json_encode($res['data'], JSON_UNESCAPED_UNICODE), + 'query_fee_flag' => $queryFeeFlag, + ]); + + return [ + 'code' => 200, + 'msg' => '操作成功!', + 'data' => $res['data'], + ]; + } + } + + // 5. 三轮均无数据 + return [ + 'code' => 200, + 'msg' => '操作成功!', + 'data' => [], + ]; + } + public static function RequestLog($url, $post_data, $mark, $code = 0) { self::CheckTableName(); diff --git a/Laravel/app/Http/Controllers/API/Third/YiJiController.php b/Laravel/app/Http/Controllers/API/Third/YiJiController.php index 2fc3b11..0200d9a 100644 --- a/Laravel/app/Http/Controllers/API/Third/YiJiController.php +++ b/Laravel/app/Http/Controllers/API/Third/YiJiController.php @@ -555,4 +555,34 @@ function build_yiji_url($regnum, $entrustid, $episodeid) // 返回完整 URL return "http://192.168.80.76/yiji?$query"; } + + /** + * 测试获取申请单详情 + * 入参: visitSqNo, requestNo, visitTypeCode(HIS 格式) + */ + public function TestGetApplyDetail() + { + try { + $visitSqNo = request('visitSqNo'); + $requestNo = request('requestNo'); + $visitTypeCode = request('visitTypeCode'); + + if (empty($visitSqNo) || empty($requestNo) || empty($visitTypeCode)) { + return response()->json([ + 'code' => 200, + 'msg' => '参数 visitSqNo、requestNo、visitTypeCode 不能为空', + 'data' => [], + ])->setEncodingOptions(JSON_UNESCAPED_UNICODE); + } + + $res = HisController::GetApplyDetail($visitSqNo, $requestNo, $visitTypeCode, 'HIS'); + return response()->json($res)->setEncodingOptions(JSON_UNESCAPED_UNICODE); + } catch (\Exception $e) { + return response()->json([ + 'code' => 200, + 'msg' => '接口异常:' . $e->getMessage(), + 'data' => [], + ])->setEncodingOptions(JSON_UNESCAPED_UNICODE); + } + } } diff --git a/Laravel/routes/api.php b/Laravel/routes/api.php index ffa895f..2012d93 100644 --- a/Laravel/routes/api.php +++ b/Laravel/routes/api.php @@ -230,6 +230,7 @@ Route::post('/CheckAppointment','App\Http\Controllers\API\Third\YiJiController@CheckAppointment' ); Route::post('/CheckAppointmentTest','App\\Http\\Controllers\\API\\Third\\YiJiController@CheckAppointmentTest' ); Route::post('/TestHisCallbackParams','App\\Http\\Controllers\\API\\Third\\YiJiController@TestHisCallbackParams' ); + Route::post('/TestGetApplyDetail','App\\Http\\Controllers\\API\\Third\\YiJiController@TestGetApplyDetail' ); Route::post('/PacsSignIn','App\Http\Controllers\API\Third\PacsController@SignIn' );//路径起名字有问题,实际是给报到机的 Route::post('/PacsCancelSignIn','App\Http\Controllers\API\Third\PacsController@CancelSignIn' );//路径起名字有问题,实际是给报到机的 Route::post('/GetEntrustInfo','App\Http\Controllers\API\Third\PacsController@GetEntrustInfo' );