@ -13,9 +13,18 @@ use Illuminate\Support\Facades\Validator;
class CheckUpController extends Controller
{
//给第三的接口,创建体检记录
public function CreateCheckupRecord(Request $request){
public function CreateCheckupRecord(Request $request)
{
// 验证请求数据
$validator = Validator::make($request->all(), [
$encrypted_data = request('encrypted_data');
$iv = request('iv');
$encrypt_iv = bin2hex(random_bytes(16 / 2));
if (!isset($iv)) return \Yz::echoError1('加密时使用的iv不能为空');
$encrypted_data = \App\Lib\Tools::AESDecrypt($encrypted_data, config('app.globals.AES_KEY'), $iv);
if (!$encrypted_data) return \Yz::echoError1('encrypted_data解密失败');
$encrypted_data = json_decode($encrypted_data, true);
$validator = Validator::make($encrypted_data, [
'checkup_info.type' => 'required|integer',
'checkup_info.free_type' => 'required|integer',
'checkup_info.name' => 'required|string',
@ -40,68 +49,146 @@ class CheckUpController extends Controller
]);
if ($validator->fails()) {
return \Yz::echoError1( $validator->errors());
return \Yz::echoError1($validator->errors());
}
$checkupInfo = $encrypted_data['checkup_info'];
$checkupInfo['institution_sn'] = $checkupInfo['org_sn'];
$checkupInfo['industry_type'] = $checkupInfo['doc_type_name'];
$checkupInfo['register_time'] = $checkupInfo['tijian_time'];
$checkupInfo['issue_time'] = null;
$checkupInfo['expire_time'] = null;
$checkupInfo['is_sanfang'] = 1;
$s = app()->make(HealthCheckupService::class);
$res = $s->CreateRecord($checkupInfo);
if ($res['status'] !== true) {
return \Yz::echoError1($res['msg']);
} else {
$msg = "记录完成";
if ($checkupInfo['type'] == 1 and $checkupInfo['free_type'] == 0) {
$msg = $msg . ",免费用户请调用上传资料接口上传相关证明文件,否则无效。";
}
$send_data = ["tijian_num" => $checkupInfo['tijian_num']];
$send_data = json_encode($send_data, JSON_UNESCAPED_UNICODE);
return \Yz::Return(true, $msg, ['info' => $this->AESEncrypt($send_data, $encrypt_iv), 'iv' => $encrypt_iv]);
}
$checkupInfo = $request->input('checkup_info');
$checkupInfo['institution_sn']=$checkupInfo['org_sn'];
$checkupInfo['industry_type']=$checkupInfo['doc_type_name'];
$checkupInfo['register_time']=$checkupInfo['tijian_time'];
$checkupInfo['issue_time']=null;
$checkupInfo['expire_time']=null;
$s=app()->make(HealthCheckupService::class);
return $s->CreateRecord($checkupInfo);
}
//给第三的接口, 上传体检结果pdf文档
public function UploadPdf(Request $request){
public function UploadPdf(Request $request)
{
$encrypted_data = request('encrypted_data');
$iv = request('iv');
$encrypt_iv = bin2hex(random_bytes(16 / 2));
if (!isset($iv)) return \Yz::echoError1('加密时使用的iv不能为空');
$encrypted_data = \App\Lib\Tools::AESDecrypt($encrypted_data, config('app.globals.AES_KEY'), $iv);
if (!$encrypted_data) return \Yz::echoError1('encrypted_data解密失败');
$decrypted_data = json_decode($encrypted_data, true);
//dd($decrypted_data);
// 验证请求数据
$validator = Validator::make($request->all(), [
$validator = Validator::make($decrypted_data, [
'type' => 'required|integer', //1证明材料2报告材料pdf
'tijian_num' => 'required|string',
'org_sn' => 'required|string',
'files' => 'required|array',
'files.*' => 'required|file|mimes:pdf|max:2048',// 每个文件必须是PDF格式, 且大小不超过2MB
// 'files.*' => 'required|file|mimes:pdf,jpg,png,webp |max:2048',// 每个文件必须是PDF格式, 且大小不超过2MB
]);
if ($validator->fails()) {
return \Yz::echoError1( $validator->errors());
return \Yz::echoError1($validator->errors());
}
$type = $decrypted_data['type'];
//查询体检号是否存在
$service=new OrgService();
$res=$service->GetOrgInfo($request->input('org_sn') );
if($res['status']!==true){
$service = new OrgService();
$res = $service->GetOrgInfo($decrypted_data['org_sn'] );
if ($res['status'] !== true) {
return \Yz::echoError1($res['msg']);
}
//查询体检号是否存在
$checkupInfo=DB::table('examination_records')
$checkupInfo = DB::table('examination_records')
->where([
'tijian_num'=>$request->input('tijian_num') ,
'institution_id'=>$res['data']->id,
])->orderBy('id','desc')->first();
if(!$checkupInfo){
'tijian_num' => $decrypted_data['tijian_num'] ,
'institution_id' => $res['data']->id,
])->orderBy('id', 'desc')->first();
if (!$checkupInfo) {
return \Yz::echoError1("体检号不存在");
}
if ($request->hasFile('files') & & $request->file('files')) {
$filesUrls=[];
foreach ($request->file('files') as $file) {
// 检查文件是否有效
if ($file->isValid()) {
// 定义存储路径
$path = 'uploads/pdfs/' . date('Ymd'); // 根据当前日期创建子目录
// if ($request->hasFile('files') & & $request->file('files')) {
if (count($decrypted_data['files']) > 0) {
$filesUrls = [];
if ($type == 1) {
$path = 'uploads/sanfang_img/' . date('Ymd'); // 根据当前日期创建子目录
}
if ($type == 2) {
$path = 'uploads/pdfs/' . date('Ymd'); // 根据当前日期创建子目录
}
$mimeTypeToExtension = [
'image/png' => 'png',
'image/jpeg' => 'jpg',
'application/pdf' => 'pdf',
];
foreach ($decrypted_data['files'] as $file) {
// 保存文件到磁盘
$fullPath = public_path($path);
if (!is_dir($fullPath)) {
mkdir($fullPath, 0777, true); // 创建目录,包括必要的父目录
}
$file_data = \App\Lib\Tools::AESDecrypt($file, config('app.globals.AES_KEY'), $iv);
// 检查文件大小是否超过2MB
$fileSize = strlen($file_data); // 获取文件数据的长度(字节数)
if ($fileSize > 2 * 1024 * 1024) { // 如果文件大小超过2MB
return \Yz::echoError1("文件大小超过2MB, 上传被拒绝。");
}
$finfo = finfo_open();
// 根据文件内容获取其MIME类型
$mimeType = finfo_buffer($finfo, $file_data, FILEINFO_MIME_TYPE);
// 关闭finfo资源
finfo_close($finfo);
// dd($mimeType);
if (array_key_exists($mimeType, $mimeTypeToExtension)) {
$file_extension = $mimeTypeToExtension[$mimeType];
} else {
return \Yz::echoError1("获取文件格式失败");
}
$filename = uniqid() . '_' . mt_rand(0, 999999) . '.' . $file_extension;
// 定义存储路径
file_put_contents($fullPath . '/' . $filename, $file_data);
// $file->storeAs($path, $filename, 'public'); // 使用 'public' 磁盘
$filesUrls[] = '/storage/' . $path . '/' . $filename;
// 保存文件到磁盘
$filename = uniqid() . '_' . $file->getClientOriginalName();
$file->storeAs($path, $filename, 'public'); // 使用 'public' 磁盘
$filesUrls[]=env('APP_URL').'/storage/'.$path.'/'.$filename;
}
if ($type == 1) {
foreach ($filesUrls as $fileUrl) {
$insert_img = DB::table('appointment_img')->insert([
'type' => 9,//通用证明材料
'imgurl' => $fileUrl,
'examination_records_id' => $checkupInfo->id,
]);
}
if ($insert_img) {
$u = DB::table('examination_records')->where('id', $checkupInfo->id)->update(['is_has_file' => 1, 'updated_at' => date('Y-m-d H:i:s')]);
}
}
$u=DB::table('examination_records')->where('id',$checkupInfo->id)->update(['pdfs'=>json_encode($filesUrls,JSON_UNESCAPED_UNICODE)]);
if(!$u){
if ($type == 2) {
$u = DB::table('examination_records')->where('id', $checkupInfo->id)->update(['pdfs' => json_encode($filesUrls, JSON_UNESCAPED_UNICODE), 'updated_at' => date('Y-m-d H:i:s')]);
}
if (!$u) {
return \Yz::echoError1("上传文件失败");
}
return \Yz::Return(true,'上传成功',[]);
$send_data = ["tijian_num" => $checkupInfo->tijian_num];
$send_data = json_encode($send_data, JSON_UNESCAPED_UNICODE);
return \Yz::Return(true, '上传成功', ['info' => $this->AESEncrypt($send_data, $encrypt_iv), 'iv' => $encrypt_iv]);
}
return \Yz::echoError1("上传文件失败");
}
function AESEncrypt($data, $encrypt_iv)
{
// return $data;
return \App\Lib\Tools::AESEncrypt($data, config('app.globals.AES_KEY'), $encrypt_iv);
}
}