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.

202 lines
7.9 KiB
PHP

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
namespace App\Http\Controllers\API\mH5;
use App\Http\Controllers\Controller;
use App\Lib\HSM;
use App\Services\mH5\PersonService;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use GuzzleHttp\Client;
use Illuminate\Support\Facades\Storage;
class PersonController extends Controller
{
//注册
public function Register(Request $request){
$openid = $request->get('userid');//中间件产生的参数
$info =request('info');
$s=app()->make(PersonService::class);
return $s->Register(['openid'=>$openid,'info'=>$info]);
}
public function GetPersonRecode(Request $request){
$openid = $request->get('userid');//中间件产生的参数
$group = $request->get('role');//中间件产生的参数
$s=app()->make(PersonService::class);
return $s->GetPersonRecode(['openid'=>$openid,'group'=>$group]);
}
//获取用户体检详情和pdf
public function GetPersonReportDetail(){
$sfz =request('sfz');
$type =request('type');
//HSM加密
$HSM_sfz =\App\Lib\HSM::HsmEncrypt($sfz);
if($HSM_sfz['status']!=true){
return \Yz::echoError1('调用HSM加密失败');
}
$sfz=$HSM_sfz['data'];
$info=DB::table('examination_records')->where(['id_card_num'=>$sfz,'is_del'=>0]);
if(isset($type)){
$info=$info->where('type',$type);
}
$info=$info ->orderBy('id', 'desc')->first();
if($info){
$info->pdfs=count(json_decode($info->pdfs, true));
$item=DB::table('report_result_item')
->where(['examination_id'=>$info->id])
->select(['item_name','item_result','flag'])->get();
$info->items=$item;
if(strlen($info->id_card_num)>30){
//HSM解密
$HSM_sfz =\App\Lib\HSM::HsmDecrypt($info->id_card_num);
if($HSM_sfz['status']!=true){
return \Yz::echoError1('调用HSM解密失败');
}
$info->id_card_num=$HSM_sfz['data'];
}
return \Yz::Return(true,'',['info'=>$info]);
}else{
return \Yz::echoError1('未找到相关体检信息');
}
}
//修改H5获取用户pdf方式改为根据体检提供的pdf链接地址获取pdf
public function GetPersonPdfDetailByLink()
{
$recordid =request('recordid');
$pdf_num =request('pdf_num');
$query=DB::table('examination_records')->where(['id'=>$recordid])->first();
if(!$query) return \Yz::echoError1('未找到对应体检记录');
$pdfs=json_decode($query->pdfs, true);
$pdfurl=$pdfs[$pdf_num];
// 使用 GuzzleHttp 获取第三方 PDF 地址的内容
$client = new Client();
$response = $client->get($pdfurl);
return response($response->getBody());
// return response($response->getBody()->getContents(), 200)
// ->header('Content-Type', 'application/pdf')
// ->header('Content-Disposition', 'inline; filename="sample.pdf"');
// $date = date("Ymd");
// $filename = 'pdf_' . time() . '.pdf';
// Storage::disk('public')->put('/pdf/'.$date.'/'."a.pdf", $response->getBody());
//
// return \Yz::Return(true,'获取成功',['fileurl' =>'/storage/pdf/'.$date.'/'.$filename]);
}
//用户扫码跳转输入身份证和电话 查询用户体检详情和pdf
public function H5GetPersonReportDetail(){
$get_info =request('info');
$info=DB::table('examination_records');
if(isset($get_info['tj_num'])){
$HSM =\App\Lib\HSM::HsmDecrypt($get_info['tj_num']);
if($HSM['status']!=true){
return \Yz::echoError1('调用HSM解密失败');
}
$get_info['tj_num'] = $HSM['data'];
$info=$info->where(['tijian_num'=>$get_info['tj_num']]);
}else{
if(!isset($get_info['sfz'])) return \Yz::echoError1('身份证不能为空');
if(!isset($get_info['tel'])) return \Yz::echoError1('电话不能为空');
//HSM加密
$HSM_sfz =\App\Lib\HSM::HsmEncrypt($get_info['sfz']);
if($HSM_sfz['status']!=true){
return \Yz::echoError1('调用HSM加密失败');
}
$get_info['sfz']=$HSM_sfz['data'];
if(isset($get_info['tel'])){
$HSM_tel =\App\Lib\HSM::HsmEncrypt($get_info['tel']);
if($HSM_tel['status']!=true){
return \Yz::echoError1('调用HSM加密失败');
}
$get_info['tel']=$HSM_tel['data'];
}
$info=$info->where(['id_card_num'=>$get_info['sfz'],'tel'=>$get_info['tel']]);
}
$info=$info->where(['is_del'=>0]) ->orderBy('id', 'desc')->first();
if($info){
$HSM_sfz =\App\Lib\HSM::HsmDecrypt($info->id_card_num);
if($HSM_sfz['status']!=true){
return \Yz::echoError1('调用HSM解密失败');
}
$info->id_card_num = $HSM_sfz['data'];
$item=DB::table('report_result_item')
->where(['examination_id'=>$info->id])
->select(['item_name','item_result','flag'])->get();
$info->items=$item;
$accessTimeout = \JWT::GetGetSecretTimeOut();
$refreshTimeout = \JWT::GetRefreshTokenTimeOut();
$access_token = \JWT::BuildJWT('yz','access',$info->id_card_num,'mH5user',$accessTimeout);
$refresh_token = \JWT::BuildJWT('yz','refresh',$info->id_card_num,'',$refreshTimeout);
return \Yz::Return(true,'',['info'=>$info,'token'=>$access_token,'refresh_token'=>$refresh_token]);
}else{
return \Yz::echoError1('未找到相关体检信息');
}
}
//给体检提供查看用户健康证报告的url 用于体检那边生成二维码
public function GetReportUrl()
{
$tijian_num =request('tijian_num');
//$baseUrl='http://223.71.106.251:82';
$baseUrl=env('QIANZHI_WAIWANG');
$report=DB::table('examination_records')->where(['tijian_num'=>$tijian_num,'is_del'=>0])->first();
if(!!$report){
$HSM=\App\Lib\HSM::HsmEncrypt($tijian_num);
if($HSM['status']!=true){
return \Yz::echoError1('调用HSM加密失败');
}
$tijian_num=$HSM['data'];
$url=$baseUrl.'/mh5/#/personReportLogin?lg_type=ewm&tj_num='.$tijian_num;
return \Yz::Return(true,'获取成功',$url);
}else{
return \Yz::echoError1('没有此体检号对应的记录');
}
}
//H5用户获取自己的 本年度 预约记录详情 2024-07-18 23:35
//获取从h5自助预约的信息
public function H5GetAppointmentRecord(Request $request)
{
date_default_timezone_set('PRC');
$currentYear = date('Y');
$firstDay = date('Y-01-01', strtotime($currentYear));
$lastDay = date('Y-12-31', strtotime($currentYear));
$openid = $request->get('userid');//中间件产生的参数
$sfz =request('sfz');
$HSM=\App\Lib\HSM::HsmEncrypt($sfz);
if($HSM['status']!=true){
return \Yz::echoError1('调用HSM加密失败');
}
$sfz=$HSM['data'];
if(isset($sfz)){
$info=DB::table('appointment_record as a')
->select('a.name','a.id_card_num','a.date','a.time','a.type','a.doc_type_name','a.created_at','b.org_name')
->join('medical_institution as b','a.org_code','=','b.sn')
->where(['a.id_card_num'=>$sfz,'a.is_del'=>0])->whereNull('a.source')
->whereBetween('a.created_at',[$firstDay,$lastDay])->orderBy('a.id','desc')->first();
if(!!$info){
$info->id_card_num=request('sfz');
}
return \Yz::Return(true,'查完完成',$info);
}
}
}