Files
fast_response/digital_doctor/application/api/controller/Drugsimagesmedicalupload.php
2025-03-17 10:56:09 +08:00

249 lines
9.6 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/*
* description
* authorwh
* email
* createTime{2024/11/27} {15:10}
*/
namespace app\api\controller;
use app\common\model\TabConf;
use think\Db;
use wanghua\general_utility_tools_php\file\upload\FileUpload;
use wanghua\general_utility_tools_php\http\Curl;
use wanghua\general_utility_tools_php\Mmodel;
use wanghua\general_utility_tools_php\SundryConfig;
use wanghua\general_utility_tools_php\tool\Tools;
class Drugsimagesmedicalupload extends BaseHttpApi
{
/**
* 药品、影像、病历上传(多文件)
*
* 流程前端上传图片发给ai不等待分析结果异步查询结果
*
* 参数:
* phone 患者手机号码
*
* 文件上传控件name值设置为file_upload否则无法上传
*
* 返回task_id前端手机号查询处理任务列表
*
* /api/Drugsimagesmedicalupload/uploadDrugsImagesMedical
*/
public function uploadDrugsImagesMedical(){
return Mmodel::catchJson(function (){
$sessionid = input('sessionid');
if(empty($sessionid)){
return Tools::set_fail('参数错误.0',['error_msg'=>'错误信息sessionid错误']);
}
$phone = input('phone');
if(empty($phone)){
return Tools::set_fail('参数错误.0',['error_msg'=>'错误信息phone错误']);
}
//存在没有生成报告的上传的基本信息就删除
Db::table(TabConf::$fa_drugs_images_medical_result)
->where('phone',$phone)
->where('reportid','eq','')
->delete();
$ai_config = config('medicine_image_report_config');
$oss_config = config('aliyun_oss_config');
$file_obj = new FileUpload();
$file_res = $file_obj->filesUploadToAliCloudOss($oss_config);
Tools::log_to_write_txt(['文件上传结果'=>$file_res]);
if($file_res['code']!=200){
return Tools::set_fail($file_res['msg']);
}
//发现之前存在没生成报告的附件则清理掉
Db::table(TabConf::$fa_drugs_images_medical_result)
->where('phone',$phone)
->where('reportid','eq','')
->delete();
$sub_content_imgarr = ['images'=>[],'webhooks'=>[$ai_config['notify_url']]];
foreach ($file_res['data'] as $key=>$item){
$md5id = md5($item['outer_req_url'].Tools::rand_str());
$sub_content_imgarr['images'][$md5id] = $item['outer_req_url'];
$item['phone'] = $phone;
$item['imageid'] = $md5id;
$item['sessionid'] = $sessionid;
//新增
Db::table(TabConf::$fa_drugs_images_medical_result)
->data($item)
->insert();
}
$header = [
'Accept: application/json',
"Content-Type: application/json"
];
$url = "https://image_fastapi.excn.vip/imgs-task";
Tools::log_to_write_txt(['药品、影像、病历上传图片处理,请求地址'=>$url,'请求参数'=>$sub_content_imgarr]);
$process_images_res = Curl::curl_request($url,'POST',json_encode($sub_content_imgarr),$header);
Tools::log_to_write_txt(['药品、影像、病历上传图片处理,返回结果'=>$process_images_res]);
//保存处理任务
$task_res = json_decode($process_images_res,true);
$task_data = [
'phone'=>$phone,
'task_id'=>$task_res['task_id'],
'msg'=>$task_res['msg'],
];
//每次都是新任务
Db::table(TabConf::$fa_drugs_images_medical_task)
->data($task_data)
->insert();
//返回分析结果
return Tools::set_ok('任务处理中,等待处理结果',['result'=>$process_images_res,'file_info'=>$file_res['data']]);
});
}
//public function testUploadFiles(){
// return Mmodel::catchJson(function (){
// $phone = input('phone');
// if(empty($phone)){
// return Tools::set_fail('参数错误.0',['error_msg'=>'错误信息phone错误']);
// }
//
// $res = (new FileUpload())->files();
// Tools::log_to_write_txt(['文件上传结果'=>$res]);
// return Tools::set_ok('测试结果',$res);
// });
//}
/**
* 消费者队列【wh专用】
*
* /api/Drugsimagesmedicalupload/queryDrugsImagesMedicalTask
*/
public function queryDrugsImagesMedicalTask(){
//查询
$obj = Db::table(TabConf::$fa_drugs_images_medical_task);
$res_lists = $obj
->whereNull('result')
//时间在10分钟之内
->where('create_time','>=',date('Y-m-d H:i:s',time()-600))
->select();
//Tools::log_to_write_txt(['查询结果'=>$res_lists,'sql:'=>$obj->getLastSql()]);
//消费者队列终止开关
$consumer_switch = SundryConfig::val('drugs_images_medical_task_consumer_switch');
if(empty($res_lists)){
return json(Tools::set_fail('无数据可处理',$consumer_switch));
}
foreach ($res_lists as $item){
$this->querySaveTaskProcessByTaskId($item['task_id']);
}
return json(Tools::set_ok('处理成功,数量:'.count($res_lists),$consumer_switch));
}
/**
* 根据报告id查询附件
*
* 参数:
* reportid 数字人报告id
* type 类型,如:影像报告 病历报告
*
*/
public function queryDrugsImagesMedicalReportId(){
return Mmodel::catchJson(function (){
//$phone = input('phone');
//if(empty($phone)){
// return Tools::set_fail('参数错误.0',['error_msg'=>'错误信息phone错误']);
//}
$type = input('type');
if(empty($type)){
return Tools::set_fail('参数错误.0',['error_msg'=>'错误信息type错误']);
}
$reportid = input('reportid');
if( empty($reportid)){
return Tools::set_fail('参数错误.0',['error_msg'=>'错误信息reportid错误']);
}
//根据报告id查询附件列表
$lists = Db::table(TabConf::$fa_drugs_images_medical_result)
//->field('id,phone,imageid,ai_result')
//->where('phone',$phone)
->where('reportid',$reportid)
->where('type',$type)
->select();
return Tools::set_ok('ok',$lists);
});
}
/**
* desc查询并更新ai分析结果
* authorwh
*
* api/Drugsimagesmedicalupload/querySaveTaskProcessByTaskId
*/
function querySaveTaskProcessByTaskId($taskid=''){
return Mmodel::catchJson(function () use ($taskid){
$task_id = '';
if($taskid){
$task_id = $taskid;
}
if(input('task_id')){
$task_id = input('task_id');
}
if(empty($task_id)){
return Tools::set_fail('参数错误.0',['error_msg'=>'错误信息task_id错误']);
}
//$log_file_name = 'drugs_images_medical';
//$header = [
// //'Accept: application/json',
// "Content-Type: application/json"
//];
//$url = "https://image_fastapi.excn.vip/imgs-task/{$task_id}";
//Tools::log_to_write_txt(['异步查询图片处理结果,请求地址'=>$url,'task_id'=>$task_id],$log_file_name);
//$process_images_res = Curl::curl_request($url,'GET',[],$header);
//Tools::log_to_write_txt(['异步查询图片处理结果,返回结果'=>$process_images_res],$log_file_name);
//if(isset($process_images_res['status']) && $process_images_res['status'] == 'error'){
// return Tools::set_fail($process_images_res['message']);
//}
//$jsondec = json_decode($process_images_res,true);
//if(isset($jsondec['detail']) && $jsondec['detail'] == '未知的任务 ID'){
// return Tools::set_fail($jsondec['detail']);
//}
//if(isset($jsondec['status']) && $jsondec['status'] == 'pending'){
// return Tools::set_fail('处理中请等待');
//}
//if(!isset($jsondec['result']) || $jsondec['result'] == ''){
// return Tools::set_fail('未查询到结果');
//}
//保存处理结果
//Db::table(TabConf::$fa_drugs_images_medical_task)
// ->data([
// 'result'=>$process_images_res
// ])
// ->where('task_id',$task_id)
// ->update();
//遍历二维数组,将每张图片的分析同步到
//foreach ($jsondec as $item){
// Db::table(TabConf::$fa_drugs_images_medical_result)
// ->where('imageid',$item['id'])
// ->data([
// 'ai_result'=>$item['result'],
// 'type'=>$item['type'],
// ])
// ->update();
//}
$process_images_res = Db::table(TabConf::$fa_drugs_images_medical_result)
->where('task_id',$task_id)
->find();
return Tools::set_ok('ok',json_decode($process_images_res,true));
});
}
}