You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

181 lines
7.0 KiB
PHP

<?php
namespace App\Http\Controllers\API\Third;
use App\Http\Controllers\API\His\HisController;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class PacsController extends Controller
{
//报到机调用此接口查询预约的记录
public function GetEntrustInfo(){
$orderNo = request('orderNo');//医嘱号
$idCardNumber = request('idCardNumber');//身份证
$visitSqNo = request('visitSqNo');//门诊挂号流水号/住院流水号
$dateRange = request('dateRange');//医嘱开单日期
$requestNo = request('requestNo');//申请单号
// 判断所有字段是否都为空
if (empty($orderNo) && empty($idCardNumber) && empty($visitSqNo) && empty($dateRange) && empty($requestNo)) {
return \Yz::JsonError("缺失查询条件");
}
$entrust_list=DB::table('s_list')->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",
"reservation_sources as reservation_sources_id",
)->where(['reservation_date'=>date('Y-m-d'),'is_pay'=>1,'is_del'=>0,'is_nullify'=>0]);
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();
$His = new HisController();
foreach ($entrust_list as $entrust) {
$entrust->reservation_sources_name=null;
if(!empty($entrust->reservation_sources_id)){
$source=DB::table('s_department_resources')
->where('id',$entrust->reservation_sources_id)
->first();
if(!!$source){
$parts = explode('-', $source->department_resources_name);
$entrust->reservation_sources_name = $parts[0];
}
}
$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],
'moOrder' => $entrust->entrust_id,
];
$entrust->requestTypeCode='';
$entrust->requestTypeName='';
$entrust->orderDeptCode='';
$res = $His::Get("查询检查申请单", $sendHisData);
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'];
}
}
}
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){
$i_log = DB::table('s_list_log')->insert([
'list_id' =>$entrust->id,
'reg_num' => $entrust->reg_num,
'old_status' => $entrust->list_status,
'new_status' => 2,
'create_user' => '报到机接口',
'note' => '报到成功',
'data' => json_encode(['checkNo'=>$checkNo],JSON_UNESCAPED_UNICODE)
]);
//通知pacs
$pacs=new CSharpController();
$pacs_res=$pacs->SaveApply($entrust->entrust_id);
$i_log = DB::table('s_list_log')->insert([
'list_id' =>$entrust->id,
'reg_num' => $entrust->reg_num,
'old_status' => $entrust->list_status,
'new_status' => 2,
'create_user' => 'Pacs接口',
'note' => '通知PacS',
'data' => json_encode($pacs_res,JSON_UNESCAPED_UNICODE)
]);
return \Yz::JsonReturn(true,'报道成功',['orderNo'=>$orderNo,'pacs_info'=>$pacs_res]);
}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('取消报道失败');
}
}
}