first commit

This commit is contained in:
2025-03-17 10:56:09 +08:00
parent b65a5fd005
commit afec54dafe
6918 changed files with 1199199 additions and 0 deletions

View File

@@ -0,0 +1,249 @@
<?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));
});
}
}