'错误信息: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分析结果 * author:wh * * 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)); }); } }