From 63e6f90885d16e6e57e1c3e4ae369af59ce71ecf Mon Sep 17 00:00:00 2001 From: yanzai Date: Wed, 9 Jul 2025 22:16:13 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=B9=E6=8E=A5=20pacs,=E5=A4=84=E7=90=86bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../API/Admin/YeWu/WorkMainController.php | 3 + .../API/His/CheckItemController.php | 2 +- .../API/Third/CSharpController.php | 209 +++++++++++++++++- .../Services/Admin/YeWu/PlanListService.php | 15 +- Laravel/config/app.php | 1 + Laravel/routes/api.php | 3 +- 6 files changed, 227 insertions(+), 6 deletions(-) diff --git a/Laravel/app/Http/Controllers/API/Admin/YeWu/WorkMainController.php b/Laravel/app/Http/Controllers/API/Admin/YeWu/WorkMainController.php index d2ef088..c8bc0a0 100644 --- a/Laravel/app/Http/Controllers/API/Admin/YeWu/WorkMainController.php +++ b/Laravel/app/Http/Controllers/API/Admin/YeWu/WorkMainController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers\API\Admin\YeWu; +use App\Http\Controllers\API\Third\CSharpController; use App\Http\Controllers\Controller; use App\Services\Admin\YeWu\PlanListService; use DateTime; @@ -281,6 +282,7 @@ class WorkMainController extends Controller ->whereTime('entrust_time', '<', $currentDateTime->toTimeString()); })->get(); $success_count=0; + $pacs=new CSharpController(); foreach ($list as $key=>$item){ $u_data=[ 'list_status' => 0, @@ -307,6 +309,7 @@ class WorkMainController extends Controller $u_count = DB::table('s_source_roster_detail_count')->where(['roster_detail_id' => $item->roster_id, 'appointment_type_id' => $item->appointment_type_id])->decrement('used_count'); if($u_count){ $success_count++; + $pacs->CancelApply($item->entrust_id); } } return \Yz::Return(true,"执行完成",['success_count'=>$success_count]); diff --git a/Laravel/app/Http/Controllers/API/His/CheckItemController.php b/Laravel/app/Http/Controllers/API/His/CheckItemController.php index fdd9cbb..885f054 100644 --- a/Laravel/app/Http/Controllers/API/His/CheckItemController.php +++ b/Laravel/app/Http/Controllers/API/His/CheckItemController.php @@ -134,7 +134,7 @@ class CheckItemController extends Controller foreach ($db_map as $item_code => $db_item) { if (!in_array($item_code, $received_ids)) { DB::table('s_check_item') - ->where('item_code', $item_code) + ->where('item_code', (string)$item_code) ->update([ 'is_del' => 1 ]); diff --git a/Laravel/app/Http/Controllers/API/Third/CSharpController.php b/Laravel/app/Http/Controllers/API/Third/CSharpController.php index 2b56ac8..5589470 100644 --- a/Laravel/app/Http/Controllers/API/Third/CSharpController.php +++ b/Laravel/app/Http/Controllers/API/Third/CSharpController.php @@ -3,14 +3,217 @@ namespace App\Http\Controllers\API\Third; use App\Http\Controllers\Controller; +use Illuminate\Database\Schema\Blueprint; use Illuminate\Http\Request; +use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Log; +use Illuminate\Support\Facades\Schema; +use Illuminate\Support\Str; class CSharpController extends Controller { - //C#调用这个接口,通知pacs - public function NoticePacs(Request $request){ + public static $request; + public static $Url = 'http://192.168.5.117/WebServiceToHis_BS/AcceptMessage.ashx'; + + public function PacsSaveApplyInfo(Request $request) + { + $orderNo = $request->query('orderNo'); + $res = $this->SaveApply($orderNo); + return \Yz::JsonReturn($res['status'],$res['msg'],$res['data']); + } + + //通知pacs 检查申请单推送 + public function SaveApply($orderNo) + { + if(config('app.globals.是否推送Pacs')==0){ + return ['status'=>false,'msg'=>'推送Pacs未开启','data'=>[]]; + } + + Log::info('推送申请单'.$orderNo); + $entrust = DB::table('s_list')->where(['entrust_id' => $orderNo, 'list_status' => 1, 'is_nullify' => 0])->first(); + $reservation_time=''; + if(isset($entrust->roster_id) and !empty($entrust->roster_id)){ + $plan= DB::table('s_source_roster_detail')->where(['id' => $entrust->roster_id])->first(); + if(!!$plan){ + $reservation_time=$plan->begin_time; + } + + } + if ($entrust) { + $patientTypeMap = [ + 0 => 'I', // I - 住院 + 1 => 'O', // O - 门诊 + 2 => 'E', // E - 急诊 + 3 => 'H', // H - 体检 + ]; + $guid = Str::uuid()->toString(); + $sex = 'U'; + if ($entrust->user_sex == 1) $sex = 'M'; + if ($entrust->user_sex == 2) $sex = 'F'; + $send_data = [ + 'Request' => [ + 'Head' => [ + 'TradeCode' => 'SaveApplyInfo', + 'TradeTime' => date('Y-m-d H:i:s'), + 'TradeNo' => $guid, + 'BranchCode' => '01', + 'HospitalCode' => '01' + ], + 'Body' => [ + 'patientinfo' => [ + 'patientid' => $entrust->reg_num, + 'patientname' => $entrust->user_name, + 'patientsex' => $sex, + 'patientbirthday' => $entrust->user_brithday, + 'age' => \Tools::calculateAge($entrust->user_brithday), + 'identifyid' => $entrust->idCardNumber, + 'mobilephone' => $entrust->user_phone, + 'visitinfo' => [ + 'visitsqno' => $entrust->episodeid, + 'source' => $patientTypeMap[$entrust->patient_type], + ], + 'applyinfo' => [ + 'accessionnumber' => $entrust->app_num, + 'hisapplytime' => $entrust->reservation_date . ' ' . $reservation_time,//与pacs 张工沟通 传 预约的日期 + 'applyorderinfo' => [ + 'orderno' => $entrust->entrust_id, + 'checkitemcode' => $entrust->entrust_code, + 'checkitemname' => $entrust->entrust, + ], + ] + ] + ] + ] + ]; + self::RequestLog(self::$Url, $send_data, "推送检查申请单", 'PACS接口'); + $response = Http::post(self::$Url, $send_data); + + if (!$response->successful()) { + self::$request->response_data = "请求PACS接口失败"; + self::$request->save(); + return ['status'=>false,'msg'=>'请求PACS接口失败','data'=>[]]; + } + + // 处理成功的响应 + $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 (isset($res['Response']['Head']['TradeStatus']) and $res['Response']['Head']['TradeStatus'] == 'AA') { + return ['status'=>true,'msg'=>'推送成功','data'=>['entrust_id' => $entrust->entrust_id]]; + } else { + return ['status'=>false,'msg'=>'推送失败','data'=>[]]; + } + } else { + return ['status'=>false,'msg'=>'医嘱不存在','data'=>[]]; + } + } + + public function PacsCancelApplyInfo(Request $request) + { $orderNo = $request->query('orderNo');//医嘱号 - Log::info($orderNo); + $res=$this->CancelApply($orderNo); + return \Yz::JsonReturn($res['status'],$res['msg'],$res['data']); + + } + + //检查申请单撤销 + public function CancelApply ($orderNo) + { + if(config('app.globals.是否推送Pacs')==0){ + return ['status'=>false,'msg'=>'推送Pacs未开启','data'=>[]]; + } + Log::info('撤销推送申请单'.$orderNo); + $entrust = DB::table('s_list')->where(['entrust_id' => $orderNo])->first(); + if ($entrust) { + $guid = Str::uuid()->toString(); + $send_data = [ + 'Request' => [ + 'Head' => [ + 'TradeCode' => 'CancelApplyInfo', + 'TradeTime' => date('Y-m-d H:i:s'), + 'TradeNo' => $guid, + 'BranchCode' => '01', + 'HospitalCode' => '01' + ], + 'Body' => [ + 'patientinfo' => [ + 'patientid' => $entrust->reg_num, + ], + 'applyinfo' => [ + 'accessionnumber' => $entrust->app_num, + ] + ] + ] + ]; + self::RequestLog(self::$Url, $send_data, "撤销检查申请单", 'PACS接口'); + $response = Http::post(self::$Url, $send_data); + + if (!$response->successful()) { + self::$request->response_data = "请求PACS接口失败"; + self::$request->save(); + return ['status'=>false,'msg'=>'请求PACS接口失败','data'=>[]]; + } + // 处理成功的响应 + $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 (isset($res['Response']['Head']['TradeStatus']) and $res['Response']['Head']['TradeStatus'] == 'AA') { + return ['status'=>true,'msg'=>'推送成功','data'=>['entrust_id' => $entrust->entrust_id]]; + } else { + return ['status'=>false,'msg'=>'撤销失败','data'=>[]]; + } + } else { + return ['status'=>false,'msg'=>'医嘱不存在','data'=>[]]; + } + } + + 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/Services/Admin/YeWu/PlanListService.php b/Laravel/app/Services/Admin/YeWu/PlanListService.php index 001fd46..201ddb0 100644 --- a/Laravel/app/Services/Admin/YeWu/PlanListService.php +++ b/Laravel/app/Services/Admin/YeWu/PlanListService.php @@ -2,6 +2,7 @@ namespace App\Services\Admin\YeWu; +use App\Http\Controllers\API\Third\CSharpController; use App\Services\SendMessgeService; use DateInterval; use Illuminate\Http\Request; @@ -398,7 +399,6 @@ WHERE } $note = "预约"; - foreach ($oldMainInfos as $key => $oldMainInfo) { if ($do_type == 2) { @@ -406,7 +406,9 @@ WHERE $note = "改约"; //如果是改约,则恢复原来的数量 $u_old = DB::table('s_source_roster_detail_count')->where(['roster_detail_id' => $oldMainInfo->roster_id, 'appointment_type_id' => $oldMainInfo->appointment_type_id, ['used_count', '>', 0]])->decrement('used_count'); + } + $i_log = DB::table('s_list_log')->insert([ 'list_id' => $oldMainInfo->id, 'reg_num' => $oldMainInfo->reg_num, @@ -419,6 +421,15 @@ WHERE } if ($u_mainList) { DB::commit(); + //通知pacs + $pacs=new CSharpController(); + foreach ($oldMainInfos as $key => $oldMainInfo) { + if ($do_type == 2) { + $pacs->CancelApply($oldMainInfo->entrust_id); + } + $oldMainInfo->roster_id=$planInfo->id; + $pacs->SaveApply($oldMainInfo->entrust_id); + } if(config('app.globals.预约完成短信通知')==1){ $this->SendMsg($oldMainInfos,$do_type); } @@ -529,6 +540,8 @@ WHERE $u_count = DB::table('s_source_roster_detail_count')->where(['roster_detail_id' => $mainInfo->roster_id, 'appointment_type_id' => $mainInfo->appointment_type_id])->decrement('used_count'); if ($u_mainList && $u_count) { DB::commit(); + $pacs=new CSharpController(); + $pacs->CancelApply($mainInfo->entrust_id); return \Yz::Return(true, '取消成功', []); } else { DB::rollBack(); diff --git a/Laravel/config/app.php b/Laravel/config/app.php index 96db4a4..7e18451 100644 --- a/Laravel/config/app.php +++ b/Laravel/config/app.php @@ -9,6 +9,7 @@ return [ '预约完成短信通知'=>0,//预约完成后短信通知1开启0关闭 '自动预约'=>1,//开启自动预约,收到推送的医嘱后,自动预约最近可用号源 '可用号源查询范围'=>7,//根据此字段循环查询当前日期 N天后的数据 + '是否推送Pacs'=>0,//是否推送pacs '患者类型'=>[ '0'=>'住院', '1'=>'门诊', diff --git a/Laravel/routes/api.php b/Laravel/routes/api.php index 3ed22d1..ff7be81 100644 --- a/Laravel/routes/api.php +++ b/Laravel/routes/api.php @@ -159,5 +159,6 @@ Route::group(['middleware'=>['log']],function () { Route::post('/GetEntrustInfo','App\Http\Controllers\API\Third\PacsController@GetEntrustInfo' ); }); -Route::get('/NoticePacs','App\Http\Controllers\API\Third\CSharpController@NoticePacs' )->middleware('log');;//通知pacs +Route::any('/PacsSaveApplyInfo','App\Http\Controllers\API\Third\CSharpController@PacsSaveApplyInfo' )->middleware('log');;//给pacs推送检查申请单 +Route::any('/PacsCancelApplyInfo','App\Http\Controllers\API\Third\CSharpController@PacsCancelApplyInfo' )->middleware('log');;//给pacs推送取消检查申请单