main
yanzai 6 months ago
parent 0c196588cb
commit 18b6d07f73

@ -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();
}
}
}
}

@ -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);
}
}

@ -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表

@ -0,0 +1,81 @@
<?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 YiJiController extends Controller
{
//查询是否跳转医技
public function CheckAppointment(){
$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("查询检查申请单",[]);
}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";
}
}

@ -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)
{
// 准备数据

@ -0,0 +1,11 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class PEISLog extends Model
{
use HasFactory;
}

@ -145,3 +145,5 @@ Route::group(['middleware'=>['xmllog'],'prefix'=>'v1'],function () {
});
Route::post('/CheckAppointment','App\Http\Controllers\API\Third\YiJiController@CheckAppointment' );

@ -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);
});

Loading…
Cancel
Save