From f39e655478449368e56cc3f42cafdb317a719ec5 Mon Sep 17 00:00:00 2001 From: yanzai Date: Wed, 18 Jun 2025 23:59:17 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=B9=E6=8E=A5his,=E7=BB=99pacs=E6=8F=90?= =?UTF-8?q?=E4=BE=9B=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../API/Admin/YeWu/WorkMainController.php | 18 +++ .../API/His/DepartmentController.php | 16 ++ .../Controllers/API/His/HisController.php | 18 +-- .../Controllers/API/Third/PacsController.php | 114 +++++++++++++++ .../Controllers/API/Third/YiJiController.php | 137 ++++++++++++++---- Laravel/app/Lib/Tools.php | 137 +++++++++++------- Laravel/config/app.php | 7 +- Laravel/public/jq_page/appointment.html | 123 ++++++++++++++-- Laravel/routes/api.php | 9 +- YiJi-admin/.env.development | 2 +- YiJi-admin/src/views/YeWu/MainList.vue | 51 ++++++- YiJi-admin/vite.config.js | 2 +- 12 files changed, 514 insertions(+), 120 deletions(-) create mode 100644 Laravel/app/Http/Controllers/API/His/DepartmentController.php create mode 100644 Laravel/app/Http/Controllers/API/Third/PacsController.php diff --git a/Laravel/app/Http/Controllers/API/Admin/YeWu/WorkMainController.php b/Laravel/app/Http/Controllers/API/Admin/YeWu/WorkMainController.php index 129cde1..02408a4 100644 --- a/Laravel/app/Http/Controllers/API/Admin/YeWu/WorkMainController.php +++ b/Laravel/app/Http/Controllers/API/Admin/YeWu/WorkMainController.php @@ -34,6 +34,24 @@ class WorkMainController extends Controller $ii = DB::table('s_check_item as a') ->leftJoin('s_check_item_device as b','a.id','=','b.item_id') ->where(['a.item_name' => $value->entrust,'a.status'=>1,"a.is_del"=>0])->get(); + $source=null; + if(!empty($value->reservation_sources)){ + $source=DB::table('s_department_resources')->where(['id'=>$value->reservation_sources])->first(); + } + $value->department_resources=$source; + $value->user_sex_label=''; + if($value->user_sex==1){ + $value->user_sex_label='男'; + } + if($value->user_sex==2){ + $value->user_sex_label='女'; + } + $value->age=\Tools::getAgeFromBirthday($value->user_brithday); + //患者类型 + $p_type=config('app.globals.患者类型'); + $value->patient_type_label=$p_type[$value->patient_type] ?? ''; + //星期 + $value->weekday_label=\Tools::GetWeekName($value->reservation_date); $msg=''; if(count($ii)==0){ diff --git a/Laravel/app/Http/Controllers/API/His/DepartmentController.php b/Laravel/app/Http/Controllers/API/His/DepartmentController.php new file mode 100644 index 0000000..4a7a6ca --- /dev/null +++ b/Laravel/app/Http/Controllers/API/His/DepartmentController.php @@ -0,0 +1,16 @@ +post(self::$baseUrl . $url_address, $data); + $response = Http::withHeaders([])->get(self::$baseUrl . $url_address, $data); // dd(self::BuildAuthorization($nonce, $timestamp, $base64Signature)); if ($response->successful()) { @@ -47,19 +47,19 @@ class HisController extends Controller self::$request->save(); $res = json_decode($res_string, true); - if (!$res['success']) { - throw new HttpResponseException(\Yz::JsonError("小程序接口提示:" . $res['message'])); + if ($res['code']<>200) { + throw new HttpResponseException(\Yz::JsonError("Roc接口提示:" . $res['msg'])); } return [ 'code' => $res['code'], - 'message' => $res['message'], - 'data' => $res['result'] + 'message' => $res['msg'], + 'data' => $res['data'] ]; } else { // 处理失败的响应 - self::$request->response_data = "请求His接口失败"; + self::$request->response_data = "请求Roc接口失败"; self::$request->save(); - throw new HttpResponseException(\Yz::JsonError("请求小程序接口失败")); + throw new HttpResponseException(\Yz::JsonError("请求Roc接口失败")); } } diff --git a/Laravel/app/Http/Controllers/API/Third/PacsController.php b/Laravel/app/Http/Controllers/API/Third/PacsController.php new file mode 100644 index 0000000..6828325 --- /dev/null +++ b/Laravel/app/Http/Controllers/API/Third/PacsController.php @@ -0,0 +1,114 @@ +select( + "list_status", + "is_nullify", + "reg_num", + "user_name", + "user_sex", + "user_brithday", + "user_phone", + "entrust_code", + "entrust", + "is_pay", + "reservation_department", + "entrust_date", + "entrust_time", + "docotr as doctor", + "patient_type", + "implement_department", + "entrust_id", + "episodeid", + "RISRAcceptDeptCode", + "reservation_date", + "reservation_time", + "canel_time as cancel_time", + "warddesc", + "wardcode", + "bedname", + "bedno", + "app_num", + "medicalHistory", + "diagnosisName", + "idCardNumber" + + ); + if(isset($dateRange)){ + if(!is_array($dateRange)) return \Yz::JsonError("日期范围必须是数组"); + $entrust_list=$entrust_list->whereBetween('entrust_date',[$dateRange[0],$dateRange[1]]); + } + if(isset($orderNo)){ + $entrust_list=$entrust_list->where('entrust_id',$orderNo); + } + if(isset($visitSqNo)){ + $entrust_list=$entrust_list->where('episodeid',$visitSqNo); + } + if(isset($requestNo)){ + $entrust_list=$entrust_list->where('app_num',$requestNo); + } + if(isset($idCardNumber)){ + $entrust_list=$entrust_list->where('idCardNumber',$idCardNumber); + } + $entrust_list=$entrust_list->get(); + return \Yz::JsonReturn(true,'查询完成',$entrust_list); + + } + //pacs调用此接口通知已经报道 + public function SignIn(){ + $orderNo = request('orderNo');//医嘱号 + $checkNo = request('checkNo');//报道号(检查号) + if(!isset($orderNo)) return \Yz::JsonError('医嘱号不能为空'); + if(!isset($checkNo)) return \Yz::JsonError('报道号不能为空'); + $entrust = DB::table('s_list')->where(['entrust_id' => $orderNo,'is_nullify'=>0,'is_del'=>0])->first(); + if(!$entrust) return \Yz::JsonError('未找到对应医嘱'); + if($entrust->list_status <> 1) return \Yz::JsonError('医嘱当前状态无法报道'); + $data = [ + 'list_status' => 2, + 'check_num' => $checkNo, + ]; + $u = DB::table('s_list')->where(['entrust_id' => $orderNo])->update($data); + if($u){ + return \Yz::JsonReturn(true,'报道成功',['orderNo'=>$orderNo]); + }else{ + return \Yz::JsonError('报道失败'); + } + + } + //pacs调用此接口通知取消报道 + public function CancelSignIn(){ + $orderNo = request('orderNo'); + $entrust = DB::table('s_list')->where(['entrust_id' => $orderNo,'is_nullify'=>0,'is_del'=>0])->first(); + if(!$entrust) return \Yz::JsonError('未找到对应医嘱'); + if($entrust->list_status <> 2) return \Yz::JsonError('医嘱当前状态无法取消报道'); + $data = [ + 'list_status' => 1, + 'check_num' => '', + ]; + $u = DB::table('s_list')->where(['entrust_id' => $orderNo])->update($data); + if($u){ + return \Yz::JsonReturn(true,'取消报道成功',['orderNo'=>$orderNo]); + }else{ + return \Yz::JsonError('取消报道失败'); + } + } + +} diff --git a/Laravel/app/Http/Controllers/API/Third/YiJiController.php b/Laravel/app/Http/Controllers/API/Third/YiJiController.php index 4146c01..df8426c 100644 --- a/Laravel/app/Http/Controllers/API/Third/YiJiController.php +++ b/Laravel/app/Http/Controllers/API/Third/YiJiController.php @@ -4,54 +4,127 @@ namespace App\Http\Controllers\API\Third; use App\Http\Controllers\API\His\HisController; use App\Http\Controllers\Controller; +use DateTime; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; class YiJiController extends Controller { //查询是否跳转医技 - public function CheckAppointment(){ + public function CheckAppointment() + { + + $cardNo = request('cardNo');//病人id + $visitSqNo = request('visitSqNo');//门诊挂号流水号/住院流水号 + $requestNoList= request('requestNoList');//申请单号(数组) + $moOrderList = request('OrderNoList');//医嘱号列表(数组) + $visitTypeCode = request('visitTypeCode');// 01:门诊 02:急诊 03:住院 04:体检 05:互联网 09:其他 + - $patientId = request('patientId');//病人id - $orderIdList = request('orderIdList');//医嘱号(数组) - $episodeid = request('episodeid');//住院号或门诊号 - $patientType = request('patientType');// 01:门诊 02:急诊 03:住院 04:体检 05:互联网 09:其他 $is_redirect = false; - $url=""; - if(empty($orderIdList)) return \Yz::JsonError("医嘱号列表不能为空"); - - //1.根据过来的参数 查询本地库是否有相关记录 - foreach($orderIdList as $orderId){ - $db_entrust=DB::table('s_list')->where([ - 'reg_num'=>$patientId, - 'entrust_id'=>$orderId, - 'episodeid'=>$episodeid, - ])->first(); - if(!$db_entrust){ - //调用his接口,入库 - $His=New HisController(); - $His::Post("查询检查申请单",[]); + $url = ""; + $entrust_ids = []; + foreach ($requestNoList as $requestNo) { + //1.查询his,获取申请单全部检查项目 + $data = [ + 'visitSqNo' => $visitSqNo, + 'requestNo' => $requestNo, + 'visitTypeCode' => $visitTypeCode, + 'feeFlag' => 0, + ]; + + $His = new HisController(); + $res = $His::Get("查询检查申请单", $data); + if ($res['code'] == 200) { + $res_data = $res['data']; + foreach ($res_data as $data_k => $data_v) { + $date = DateTime::createFromFormat('YmdHis', $data_v['requestDate']); + if ($date) { + $entrust_datePart = $date->format('Y-m-d'); // 日期部分 + $entrust_timePart = $date->format('H:i:s'); // 时间部分 + } else { + $entrust_datePart = ''; + $entrust_timePart = ''; + } + $birthday_f = DateTime::createFromFormat('Ymd', $data_v['patientBirthDate']); + if ($birthday_f) { + $birthday = $birthday_f->format('Y-m-d'); + }else{ + $birthday=''; + } + + $mapping = [ + '03' => 0, // 住院 -> 0 + '01' => 1, // 门诊 -> 1 + '02' => 2, // 急诊 -> 2 + '04' => 3, // 体检 -> 3 + ]; + + $patientType = $mapping[$visitTypeCode] ?? 9; + foreach ($data_v['itemList'] as $item_k => $item) { + $entrust_ids[] = $item['orderNo']; + //查询库里是否存在该检医嘱 + $db_item = DB::table('s_list')->where(['entrust_id' => $item['orderNo']])->first(); + if (!$db_item) { + //如果不存在则进行创建 + $params = [ + 'list_status' => 0, + 'reg_num' => $data_v['cardNo'], + 'user_name' =>$data_v['patientName'], + 'user_sex' => $data_v['patientGenderName'] == '男' ? 1 : 2, + 'entrust_code' => $item['termCode'], + 'entrust' => $item['termName'], + 'is_pay' => $data_v["chargeStatusName"] == '已收费' ? 1 : 0, + 'reservation_department' =>$data_v["orderDeptName"], + 'entrust_date' =>$entrust_datePart, + 'entrust_time' =>$entrust_timePart, + 'user_brithday' =>$birthday, + 'docotr' => $data_v["orderPersonName"], + 'patient_type' => $patientType, + 'user_phone' => $data_v["mobile"], + 'implement_department' =>$item['execDeptName'], + 'entrust_id' => $item['orderNo'], + 'episodeid' => $visitSqNo, + // 'RISRExamID' => $order["RISRExamID"] ? $order["RISRExamID"] : null, //检查号,先屏蔽掉,获取不到 + 'RISRAcceptDeptCode' => $item["execDeptCode"], //接收科室代码 + 'warddesc' => $data_v["areaName"], //病区 + 'wardcode' => $data_v["areaCode"], //病区 + 'bedname' => $data_v["bedName"], //病床号 + 'bedno' => $data_v["bedNo"], //病床号 + 'app_num' => $data_v["requestNo"], //申请单号 + 'medicalHistory' => $data_v["medicalHistory"], //病史摘要 + 'diagnosisName' => $data_v["diagnosisName"], //临床诊断(诊断名称) + 'idCardNumber' => $data_v["idCardNumber"], //身份证号 + ]; + DB::table('s_list')->insert($params); + } + } + } }else{ - continue; + return \Yz::JsonError('Roc接口查询失败'); } + } - //2.本地库无记录则查询his获取数据后进行更新 ,如果有,则进行跳转 - if(true){ - $is_redirect=true; - $url=$this->build_yiji_url($patientId,$orderIdList,$episodeid); - }else{ - $is_redirect=false; + + + if (true) { + $is_redirect = true; + $url = $this->build_yiji_url($cardNo, $entrust_ids, $visitSqNo); + } else { + $is_redirect = false; } - return \Yz::JsonReturn(true,'查询成功',['is_redirect'=>$is_redirect,'url'=>$url]); + return \Yz::JsonReturn(true, '查询成功', ['is_redirect' => $is_redirect, 'url' => $url]); } function QueryHisShenQingDan() { } - function build_yiji_url($regnum, $entrustid, $episodeid) { + + function build_yiji_url($regnum, $entrustid, $episodeid) + { // 固定参数 $dotype = 1; $appointment_type = 1; @@ -64,10 +137,10 @@ class YiJiController extends Controller // 构造查询参数,并对 regnum 和 episodeid 使用 rawurlencode 编码 $params = [ - 'regnum' => rawurlencode($regnum), - 'entrustid' => $entrustid_str, - 'episodeid' => rawurlencode($episodeid), - 'dotype' => $dotype, + 'regnum' => rawurlencode($regnum), + 'entrustid' => $entrustid_str, + 'episodeid' => rawurlencode($episodeid), + 'dotype' => $dotype, 'appointment_type' => $appointment_type, ]; diff --git a/Laravel/app/Lib/Tools.php b/Laravel/app/Lib/Tools.php index c50fdac..dbe5dc8 100644 --- a/Laravel/app/Lib/Tools.php +++ b/Laravel/app/Lib/Tools.php @@ -10,43 +10,47 @@ class Tools public static function GetWeekName($date) { $dayOfWeek = date('N', strtotime($date)); // 获取星期几,1代表星期一,7代表星期日 - $weekname=''; + $weekname = ''; switch ($dayOfWeek) { case 1: - $weekname= "星期一"; + $weekname = "星期一"; break; case 2: - $weekname= "星期二"; + $weekname = "星期二"; break; case 3: - $weekname="星期三"; + $weekname = "星期三"; break; case 4: - $weekname= "星期四"; + $weekname = "星期四"; break; case 5: - $weekname= "星期五"; + $weekname = "星期五"; break; case 6: - $weekname= "星期六"; + $weekname = "星期六"; break; case 7: - $weekname= "星期日"; + $weekname = "星期日"; break; default: - $weekname= "无效日期"; + $weekname = "无效日期"; } return $weekname; } + //计算年龄,返回年龄 如 31 - public static function calculateAge($birthdate) { + public static function calculateAge($birthdate) + { $birthdate = new DateTime($birthdate); $currentDate = new DateTime(); $age = $currentDate->diff($birthdate)->y; return $age; } + //计算年龄,返回年龄 如 31岁3月3天 - public static function calculateAgeText($birthdate) { + public static function calculateAgeText($birthdate) + { $birthdate = new DateTime($birthdate); $currentDate = new DateTime(); $ageDiff = $currentDate->diff($birthdate); @@ -68,31 +72,50 @@ class Tools return $ageString; } - public static function Get($url, $data_s,$mark='') { - $data=[ - 'request_url'=>$url, - 'get_data'=>$data_s, + + //根据生日返回年龄 + public static function getAgeFromBirthday($birthday, $format = 'Y-m-d') + { + // 尝试按照指定格式解析日期 + $date = DateTime::createFromFormat($format, $birthday); + + // 检查日期是否有效以及是否完全匹配格式 + if (!$date || $date->format($format) !== $birthday) { + return ''; // 无效的日期格式,返回空字符串 + } + + $today = new DateTime(); + $interval = $today->diff($date); + return $interval->y; + } + + public static function Get($url, $data_s, $mark = '') + { + $data = [ + 'request_url' => $url, + 'get_data' => $data_s, ]; - $log_id=self::RequestLog($data,0,$mark); - $response = Http::get($url,$data_s); + $log_id = self::RequestLog($data, 0, $mark); + $response = Http::get($url, $data_s); if ($response->successful()) { $res = $response->json(); - }else{ - $res=$response->body(); + } else { + $res = $response->body(); } - $data=[ - 'response_data'=>$res + $data = [ + 'response_data' => $res ]; - self::RequestLog($data,$log_id); + self::RequestLog($data, $log_id); return $res; } - public static function Post($url, $data_string,$mark='') + + public static function Post($url, $data_string, $mark = '') { - $data=[ - 'request_url'=>$url, - 'post_data'=>$data_string, + $data = [ + 'request_url' => $url, + 'post_data' => $data_string, ]; - $log_id=self::RequestLog($data,0,$mark); + $log_id = self::RequestLog($data, 0, $mark); $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); @@ -106,25 +129,24 @@ class Tools curl_setopt($curl, CURLOPT_POSTFIELDS, $data_string); $r = curl_exec($curl); curl_close($curl); - // $r='{"resultMsg":"登记成功1111","resultCode":"0","resultDatas":[{"queueNo":"16","checkNo":"2108180032","videoRoom":"超声影像室","isStudyGroupRegistration":"N","imageNo":"p2108180029","currentNum":1},{"queueNo":"17","checkNo":"2108180033","videoRoom":"超声影像室","isStudyGroupRegistration":"N","imageNo":"p2108180029","currentNum":2},{"queueNo":"18","checkNo":"2108180034","videoRoom":"超声影像室","isStudyGroupRegistration":"N","imageNo":"p2108180029","currentNum":3}],"isSuccess":true}'; + // $r='{"resultMsg":"登记成功1111","resultCode":"0","resultDatas":[{"queueNo":"16","checkNo":"2108180032","videoRoom":"超声影像室","isStudyGroupRegistration":"N","imageNo":"p2108180029","currentNum":1},{"queueNo":"17","checkNo":"2108180033","videoRoom":"超声影像室","isStudyGroupRegistration":"N","imageNo":"p2108180029","currentNum":2},{"queueNo":"18","checkNo":"2108180034","videoRoom":"超声影像室","isStudyGroupRegistration":"N","imageNo":"p2108180029","currentNum":3}],"isSuccess":true}'; - $data=[ - 'response_data'=>$r + $data = [ + 'response_data' => $r ]; - self::RequestLog($data,$log_id); - - + self::RequestLog($data, $log_id); return $r; } - public static function PostSoap($url, $data_string,$mark='') + + public static function PostSoap($url, $data_string, $mark = '') { - $data=[ - 'request_url'=>$url, - 'post_data'=>$data_string, + $data = [ + 'request_url' => $url, + 'post_data' => $data_string, ]; - $log_id=self::RequestLog($data,0,$mark); + $log_id = self::RequestLog($data, 0, $mark); $xml_data = ' @@ -141,7 +163,7 @@ class Tools - + '; @@ -170,32 +192,33 @@ class Tools $jsonData = (string)$sendResult; - // $res = explode('', $r)[1]; - // $res = explode('', $res)[0]; - // $xmlData = simplexml_load_string($res); - // $jsonData = json_encode($xmlData, JSON_UNESCAPED_UNICODE); - }catch (Exception $e) { + // $res = explode('', $r)[1]; + // $res = explode('', $res)[0]; + // $xmlData = simplexml_load_string($res); + // $jsonData = json_encode($xmlData, JSON_UNESCAPED_UNICODE); + } catch (Exception $e) { $jsonData = $e->getMessage(); } - // dd($res); - // $result = json_decode($jsonData, true); + // dd($res); + // $result = json_decode($jsonData, true); curl_close($ch); - $data=[ - 'response_data'=>$r + $data = [ + 'response_data' => $r ]; - self::RequestLog($data,$log_id); + self::RequestLog($data, $log_id); return $jsonData; } - public static function RequestLog($arr,$id,$mark='') + + public static function RequestLog($arr, $id, $mark = '') { //记录请求日志 date_default_timezone_set('PRC'); LogService::CheckTableName(); $table_name = 'zz_request_log_' . date('ym'); $response_data = isset($arr['response_data']) ? self::JsonEncode($arr['response_data']) : ''; - $header_data = isset($arr['request_header']) ?self::JsonEncode($arr['request_header']):''; - $post_data = isset($arr['post_data'])?self::JsonEncode($arr['post_data']):''; - $get_data = isset($arr['get_data'])?self::JsonEncode($arr['get_data'], JSON_UNESCAPED_UNICODE):''; + $header_data = isset($arr['request_header']) ? self::JsonEncode($arr['request_header']) : ''; + $post_data = isset($arr['post_data']) ? self::JsonEncode($arr['post_data']) : ''; + $get_data = isset($arr['get_data']) ? self::JsonEncode($arr['get_data'], JSON_UNESCAPED_UNICODE) : ''; $milliseconds = round(microtime(true) * 1000); $date = date("Y-m-d H:i:s", $milliseconds / 1000); $formatted_date = sprintf("%s.%03d", $date, $milliseconds % 1000); @@ -209,7 +232,7 @@ class Tools ]); } else { return DB::table($table_name)->insertGetId([ - 'mark'=>$mark, + 'mark' => $mark, 'request_ip' => '127.0.0.1', 'response_data' => $response_data, 'header_data' => $header_data, @@ -221,8 +244,10 @@ class Tools ]); } } - public static function JsonEncode($data){ //格式化数据,转json - $post_data =$data; + + public static function JsonEncode($data) + { //格式化数据,转json + $post_data = $data; $post_data = json_encode($post_data, JSON_UNESCAPED_UNICODE); $str_len = mb_strlen($post_data); $str_size = $str_len / 1024; diff --git a/Laravel/config/app.php b/Laravel/config/app.php index 48cf920..96db4a4 100644 --- a/Laravel/config/app.php +++ b/Laravel/config/app.php @@ -9,7 +9,12 @@ return [ '预约完成短信通知'=>0,//预约完成后短信通知1开启0关闭 '自动预约'=>1,//开启自动预约,收到推送的医嘱后,自动预约最近可用号源 '可用号源查询范围'=>7,//根据此字段循环查询当前日期 N天后的数据 - + '患者类型'=>[ + '0'=>'住院', + '1'=>'门诊', + '2'=>'急诊', + '3'=>'体检', + ], ], /* diff --git a/Laravel/public/jq_page/appointment.html b/Laravel/public/jq_page/appointment.html index 6ef3e7f..615ab10 100644 --- a/Laravel/public/jq_page/appointment.html +++ b/Laravel/public/jq_page/appointment.html @@ -16,7 +16,7 @@