From 18b6d07f73c93dd7d0cef1b2cd514303d14bcda1 Mon Sep 17 00:00:00 2001 From: yanzai Date: Sat, 14 Jun 2025 00:11:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=B9=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/API/His/EntrustController.php | 11 ++- .../Controllers/API/His/HisController.php | 94 ++++++++++++++++++- .../API/Third/EntrustController.php | 2 +- .../Controllers/API/Third/YiJiController.php | 81 ++++++++++++++++ Laravel/app/Lib/Yz.php | 13 +++ Laravel/app/Models/PEISLog.php | 11 +++ Laravel/routes/api.php | 2 + Laravel/routes/web.php | 18 +--- 8 files changed, 213 insertions(+), 19 deletions(-) create mode 100644 Laravel/app/Http/Controllers/API/Third/YiJiController.php create mode 100644 Laravel/app/Models/PEISLog.php diff --git a/Laravel/app/Http/Controllers/API/His/EntrustController.php b/Laravel/app/Http/Controllers/API/His/EntrustController.php index 76c4b5b..4ce5270 100644 --- a/Laravel/app/Http/Controllers/API/His/EntrustController.php +++ b/Laravel/app/Http/Controllers/API/His/EntrustController.php @@ -4,12 +4,21 @@ namespace App\Http\Controllers\API\His; use App\Http\Controllers\Controller; use Illuminate\Http\Request; +use Illuminate\Support\Facades\DB; class EntrustController extends Controller { //查询本地是否有对应医嘱,没有则主动查询His - public function () + public function GetEntrust() { + $reg_num = request('reg_num'); + $entrust_ids = request('entrust_ids'); + $episodeid = request('episodeid'); + if(count($entrust_ids) > 0){ + foreach ($entrust_ids as $entrust_id) { + $entrust = DB::table('s_list')->where(['reg_num' => $reg_num, 'entrust_id' => $entrust_id, 'episodeid' => $episodeid])->first(); + } + } } } diff --git a/Laravel/app/Http/Controllers/API/His/HisController.php b/Laravel/app/Http/Controllers/API/His/HisController.php index b4f2405..06d5248 100644 --- a/Laravel/app/Http/Controllers/API/His/HisController.php +++ b/Laravel/app/Http/Controllers/API/His/HisController.php @@ -3,9 +3,101 @@ namespace App\Http\Controllers\API\His; use App\Http\Controllers\Controller; +use Illuminate\Database\Schema\Blueprint; +use Illuminate\Http\Client\RequestException; +use Illuminate\Http\Exceptions\HttpResponseException; use Illuminate\Http\Request; +use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Http; +use Illuminate\Support\Facades\Schema; class HisController extends Controller { - // + public static $request; + public static $baseUrl = 'http://192.168.80.39:7801'; + + public static function Api($url_code) + { + $api['查询检查申请单'] = "/roc/order-service/api/v1/apply/pacs/apply/create/query"; + $api['查询科室列表'] = "/roc/curr-web/api/v1/common/dept/query"; + $api['查询人员列表'] = "/roc/curr-web/api/v1/common/employee/query"; + $api['查询非药品物价项目列表'] = "/roc/curr-web/api/v1/curr/unpharmaceutical/undrug/eisaiOrDiagnose/query"; + return $api["{$url_code}"] ?? $url_code; + } + + public static function Post($url_code, $data) + { + + $url_address = self::Api($url_code); + self::RequestLog(self::$baseUrl . $url_address, $data, $url_code, 'His接口'); + + + $response = Http::withHeaders([])->post(self::$baseUrl . $url_address, $data); + + // dd(self::BuildAuthorization($nonce, $timestamp, $base64Signature)); + if ($response->successful()) { + // 处理成功的响应 + $res_string = json_encode($response->json(), JSON_UNESCAPED_UNICODE); + // dd($res_string); + $str_len = mb_strlen($res_string, 'utf-8'); + $str_size = $str_len / 1024; + $save_res = $res_string; + if ($str_size > 10) $save_res = '{"data":"Row size too large"}'; + self::$request->response_data = $save_res; + self::$request->save(); + + $res = json_decode($res_string, true); + if (!$res['success']) { + throw new HttpResponseException(\Yz::JsonError("小程序接口提示:" . $res['message'])); + } + return [ + 'code' => $res['code'], + 'message' => $res['message'], + 'data' => $res['result'] + ]; + } else { + // 处理失败的响应 + self::$request->response_data = "请求His接口失败"; + self::$request->save(); + throw new HttpResponseException(\Yz::JsonError("请求小程序接口失败")); + } + + } + + public static function RequestLog($url, $post_data, $mark, $code = 0) + { + self::CheckTableName(); + foreach ($post_data as $key => $post_datum) { + $str_len = mb_strlen(json_encode($post_datum, JSON_UNESCAPED_UNICODE), 'utf-8'); + $str_size = $str_len / 1024; + if ($str_size > 10) { + $post_data["$key"] = 'Row size too large'; + } + } + $post_data = json_encode($post_data, JSON_UNESCAPED_UNICODE); + self::$request->code = $code; + self::$request->mark = $mark; + self::$request->post_data = $post_data == '[]' ? '{}' : $post_data; + self::$request->request_url = $url; + self::$request->save(); + } + + public static function CheckTableName() + { + $table_name = 'zz_peis_log_' . date('ym'); + $table_count = DB::select('select count(1) as c from information_schema.TABLES where table_schema = ? and table_name = ?', [env('DB_DATABASE'), $table_name])[0]; + if ($table_count->c === 0) { + Schema::create($table_name, function (Blueprint $table) { + $table->id(); + $table->string('code', 50)->index(); + $table->string('mark', 50)->index(); + $table->text('post_data'); + $table->text('response_data')->nullable(); + $table->string('request_url', 2000); + $table->timestamps(); + }); + } + self::$request = new \App\Models\PEISLog(); + self::$request->setTable($table_name); + } } diff --git a/Laravel/app/Http/Controllers/API/Third/EntrustController.php b/Laravel/app/Http/Controllers/API/Third/EntrustController.php index 661136c..1782127 100644 --- a/Laravel/app/Http/Controllers/API/Third/EntrustController.php +++ b/Laravel/app/Http/Controllers/API/Third/EntrustController.php @@ -7,7 +7,7 @@ use Illuminate\Support\Facades\Log; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use App\Services\Xml\ShenQingDanService; - +//此文件秦皇岛中医院用不到 class EntrustController extends Controller { //创建医嘱记录进入 s_list表 diff --git a/Laravel/app/Http/Controllers/API/Third/YiJiController.php b/Laravel/app/Http/Controllers/API/Third/YiJiController.php new file mode 100644 index 0000000..4146c01 --- /dev/null +++ b/Laravel/app/Http/Controllers/API/Third/YiJiController.php @@ -0,0 +1,81 @@ +where([ + 'reg_num'=>$patientId, + 'entrust_id'=>$orderId, + 'episodeid'=>$episodeid, + ])->first(); + if(!$db_entrust){ + //调用his接口,入库 + $His=New HisController(); + $His::Post("查询检查申请单",[]); + }else{ + continue; + } + } + + //2.本地库无记录则查询his获取数据后进行更新 ,如果有,则进行跳转 + + if(true){ + $is_redirect=true; + $url=$this->build_yiji_url($patientId,$orderIdList,$episodeid); + }else{ + $is_redirect=false; + } + return \Yz::JsonReturn(true,'查询成功',['is_redirect'=>$is_redirect,'url'=>$url]); + } + + function QueryHisShenQingDan() + { + + } + function build_yiji_url($regnum, $entrustid, $episodeid) { + // 固定参数 + $dotype = 1; + $appointment_type = 1; + + // 判断 entrustid 是否为数组,如果是,则用逗号 , 拼接并分别进行 rawurlencode 编码 + if (is_array($entrustid)) { + // 对数组中的每个元素进行 rawurlencode 编码后再拼接 + $entrustid_str = implode(',', array_map('rawurlencode', $entrustid)); + } + + // 构造查询参数,并对 regnum 和 episodeid 使用 rawurlencode 编码 + $params = [ + 'regnum' => rawurlencode($regnum), + 'entrustid' => $entrustid_str, + 'episodeid' => rawurlencode($episodeid), + 'dotype' => $dotype, + 'appointment_type' => $appointment_type, + ]; + + // 使用 http_build_query 构建查询字符串,注意设置第四个参数为 PHP_QUERY_RFC3986 + // 以确保生成的 URL 符合 RFC 3986 标准 + $query = http_build_query($params, '', '&', PHP_QUERY_RFC3986); + + // 返回完整 URL + return "http://192.168.80.76/yiji?$query"; + } +} diff --git a/Laravel/app/Lib/Yz.php b/Laravel/app/Lib/Yz.php index b1e5efa..112843a 100644 --- a/Laravel/app/Lib/Yz.php +++ b/Laravel/app/Lib/Yz.php @@ -18,6 +18,12 @@ class Yz{ $result['msg']=$msg; return $result; } + public static function JsonError($msg){ + $result=array(); + $result['status']=false; + $result['msg']=$msg; + return response()->json($result)->setEncodingOptions(JSON_UNESCAPED_UNICODE); + } public static function Return($status,$msg,$data=[]){ $result=array(); @@ -26,6 +32,13 @@ class Yz{ $result['data']=$data; return $result; } + public static function JsonReturn($status,$msg,$data=[]){ + $result=array(); + $result['status']=$status; + $result['msg']=$msg; + $result['data']=$data; + return response()->json($result)->setEncodingOptions(JSON_UNESCAPED_UNICODE); + } public static function XMLReturn($SourceSystem,$MessageID,$code,$msg) { // 准备数据 diff --git a/Laravel/app/Models/PEISLog.php b/Laravel/app/Models/PEISLog.php new file mode 100644 index 0000000..2e5bef7 --- /dev/null +++ b/Laravel/app/Models/PEISLog.php @@ -0,0 +1,11 @@ +['xmllog'],'prefix'=>'v1'],function () { }); +Route::post('/CheckAppointment','App\Http\Controllers\API\Third\YiJiController@CheckAppointment' ); + diff --git a/Laravel/routes/web.php b/Laravel/routes/web.php index 03c8560..59f25d3 100644 --- a/Laravel/routes/web.php +++ b/Laravel/routes/web.php @@ -32,22 +32,8 @@ Route::get('/test','App\Http\Controllers\TestController@DBtest' ); Route::get('/yiji', function (Request $request) { $queryString = $request->server('QUERY_STRING'); // 获取原始查询字符串 return redirect("http://192.168.80.76/jq_page/appointment.html?".$queryString); - //parse_str(urldecode($queryString), $data); // 先 urldecode,再 parse_str 解析 - // dd($queryString); -// $regnum=$request->query('regnum'); -// $entrustid=$request->query('entrustid'); -// $episodeid=$request->query('episodeid'); -// $dotype=$request->query('dotype'); -// $appointment_type=$request->query('appointment_type'); - -// $data=[ -// 'regnum'=>$regnum, -// 'entrustid'=>$entrustid, -// 'episodeid'=>$episodeid, -// 'dotype'=>$dotype, -// 'appointment_type'=>$appointment_type, -// ]; -// dd($data); }); + +