对接 pacs,处理bug

main
yanzai 5 months ago
parent 1684826234
commit 63e6f90885

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

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

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

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

@ -9,6 +9,7 @@ return [
'预约完成短信通知'=>0,//预约完成后短信通知1开启0关闭
'自动预约'=>1,//开启自动预约,收到推送的医嘱后,自动预约最近可用号源
'可用号源查询范围'=>7,//根据此字段循环查询当前日期 N天后的数据
'是否推送Pacs'=>0,//是否推送pacs
'患者类型'=>[
'0'=>'住院',
'1'=>'门诊',

@ -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推送取消检查申请单

Loading…
Cancel
Save