input()]); //header('Content-Type: text/event-stream'); //header('Cache-Control: no-cache'); //header('Connection: keep-alive'); //header('X-Accel-Buffering: no'); $config = config('ai_listen_report_config'); //$question = '';//input('question',''); $chatobj = new ChatGPT(); $chatobj->url = $config['base_url']; $chatobj->model = ''; $chatobj->apiKey = $config['APIKey']; $answer_json_arr = []; //医生登录的ticket $qa_chat_ticket = input('ticket'); if(empty($qa_chat_ticket)){ return json(Tools::set_fail('qa_chat_ticket必须')); } $phone = input('phone');//患者手机号 if (empty($phone)){ return json(Tools::set_fail('患者手机号必须')); } //医生开始对话的token $say_token = input('say_token'); if(empty($say_token)){ return json(Tools::set_fail('say_token必须')); } $user = Db::table('fa_hdrdoctorusers')->where('qa_chat_ticket',$qa_chat_ticket)->find(); if(empty($user)){ return json(Tools::set_fail('医生不存在,请确认qa_chat_ticket')); } //$before_report_dataid = input('before_report_dataid');//上一次生成的疼痛科报告id //$before_report_content = ''; //$base_info = []; //if($before_report_dataid){ // $before_report = Db::table('fa_tt_medical_report') // ->where('id',$before_report_dataid) // ->find(); // if($before_report){ // $before_report_content = $before_report['report_content']; // //查询基本信息 // $base_info = Db::table(TabConf::$fa_tt_userbaseinfo) // ->where('id',$before_report['hdruserbaseinfo_id']) // ->find(); // } //} $gender = input('sex'); if(empty($gender)){ return json(Tools::set_fail('性别必须')); } $name = input('name'); if(empty($name)){ return json(Tools::set_fail('姓名必须')); } $hdruserbaseinfo_id = input('hdruserbaseinfo_id'); if(empty($hdruserbaseinfo_id)){ return json(Tools::set_fail('hdruserbaseinfo_id必须')); } //查询历史聊天记录 $his_record = Db::table('fa_ty_chathistory') ->where('say_token',$say_token) ->order('id asc') ->where('hdruserbaseinfo_id',$hdruserbaseinfo_id) //->where('createtime','>',$day3)//3天之内 ->select(); $config = [ 'stream'=>false, 'chatId'=>Tools::getMillisecond(), ]; //必须 $reportid = input('reportid'); if(empty($reportid)){ return json(Tools::set_fail('数字人的报告id必修')); } //查询数字人报告 $report = Db::table(TabConf::$fa_tt_medical_report) ->where('id',$reportid) ->find(); if(empty($report)){ return json(Tools::set_fail('数字人报告不存在')); } $body_check = input('body_check'); if(empty($body_check)){ return json(Tools::set_fail('体格检查必须')); } //设置之前的报告内容 //$content = [ // ["role" => "user", "content" => $before_report_content] //]; //添加性别 //if($gender){ // $content[] = ["role" => "user", "content" => '【性别】:'.$gender]; //} //$age = $report['age']; //$edu = $report['edu']; //$career_year = $report['career_year']; //$power = $report['power']; //$satisfaction = $report['satisfaction']; //$old_career_year = $report['old_career_year']; //$old_career_power = $report['old_career_power']; //$support = $report['support']; //$marriage = $report['marriage']; //$live = $report['live']; //构建基本信息 //$content[] = ["role" => "user", "content" => "\n\n".'【病人姓名】:'.$name]; //$content[] = ["role" => "user", "content" => '【病人性别】:'.$gender]; //$content[] = ["role" => "user", "content" => '【病人年龄】:'.$age]; //$content[] = ["role" => "user", "content" => '【教育程度】:'.$edu]; //$content[] = ["role" => "user", "content" => '【职业及年限】:'.$career_year]; //$content[] = ["role" => "user", "content" => '【体力要求】:'.$power]; //$content[] = ["role" => "user", "content" => '【经济满意度】:'.$satisfaction]; //$content[] = ["role" => "user", "content" => '【过往职业及年限】:'.$old_career_year]; //$content[] = ["role" => "user", "content" => '【过往职业体力要求】:'.$old_career_power]; //$content[] = ["role" => "user", "content" => '【社会支持度】:'.$support]; //$content[] = ["role" => "user", "content" => '【婚姻状况】:'.$marriage]; //$content[] = ["role" => "user", "content" => '【居住情况】:'.$live]; //对话记录 $chat_his = "\n\n"; foreach ($his_record as $item){ //$content[] = ["role" => "user", "content" => "\n\n".$item['chat_msg']]; $chat_his .= $item['chat_msg']."\n"; } //$sub_content_msg = [ // ["role" => "user", "content" => implode('',array_column($content,'content'))] //]; //$chatobj->setBefore($sub_content_msg); $num_per_report = $report['report_content']; //数字人报告+对话记录 $question = <<returnAnswer($question,$config,$answer_json_arr); Tools::log_to_write_txt(['听译生成报告,请求gpt:'=>$chatobj->post_msg_body]); Tools::log_to_write_txt(['听译生成报告,gpt回复:'=>$answer_json_arr]); $res_content = []; //把返回的报告保存起来 foreach ($answer_json_arr as $josn){ $item = json_decode($josn,true); $choices = $item['choices']; foreach ($choices as $choice){ $data = [ 'doctor'=>$user['username'], //病人 'report_content'=>$choice['message']['content'], 'ticket'=>$qa_chat_ticket, 'from'=>input('from','ty'),//来源 'name'=>$name, 'gender'=>$gender, 'hdruserbaseinfo_id'=>$hdruserbaseinfo_id, 'username'=>$phone, 'userbaseid'=>$report['userbaseid'], //'diagnostic_result'=>$report['diagnostic_result'], //'create_time'=>$report['create_time'], 'age'=>$report['age'], 'main_complaint'=>$report['main_complaint'], 'medical_history'=>$report['medical_history'], 'past_history'=>$report['past_history'], 'allergy_history'=>$report['allergy_history'], 'family_history'=>$report['family_history'], 'personal_history'=>$report['personal_history'], 'menstrual_marital_history'=>$report['menstrual_marital_history'], 'diagnosis'=>$report['diagnosis'], 'treatment'=>$report['treatment'], 'phone'=>$report['phone'], 'status'=>$report['status'], //'user_phone'=>$report['user_phone'], 'date'=>$report['date'],// 'hdrdepartment_id'=>$report['hdrdepartment_id'], 'hdrdepartment'=>$report['hdrdepartment'], 'edu'=>$report['edu'], 'career_year'=>$report['career_year'], 'power'=>$report['power'], 'satisfaction'=>$report['satisfaction'], 'old_career_year'=>$report['old_career_year'], 'old_career_power'=>$report['old_career_power'], 'support'=>$report['support'], 'marriage'=>$report['marriage'], 'live'=>$report['live'], 'home'=>$report['home'], 'address'=>$report['address'], 'wechat_no'=>$report['wechat_no'], //'is_flow'=>$report['is_flow'], ]; $report_id = Db::table('fa_ty_medical_report')->insertGetId($data); //日期 //$data['date'] = date('Y-m-d'); //【对话记录跟着报告走】 Db::table(TabConf::$fa_ty_chathistory) ->where('say_token',$qa_chat_ticket) ->data(['reportid'=>$report_id]) ->update(); $res_content[] = ['report_id'=>$report_id,'report_content'=>$choice['message']['content']]; } } $client_id = input('client_id'); if(empty($client_id)){ return json(Tools::set_fail('client_id必须')); } //查询广播客户端id $arr = Db::table('fa_device') ->where('ticket',$qa_chat_ticket) ->select(); $clientid_arr = array_column($arr,'clientid'); $json = Tools::wss_json_ok('Reportty/createReport','ok',['flow_code'=>'create_report_end']); Gateway::sendToAll($json,$clientid_arr,[$client_id]); return json(Tools::set_ok($res_content)); } /** * desc:查询报告详情 * * api/Reportty/getReportById * 参数:dataid 报告id * ticket:用户ticket * author:wh */ function getReportById(){ return Mmodel::catchJson(function (){ $info = Db::table('fa_ty_medical_report') ->where('id',input('dataid')) ->find(); return Tools::set_ok($info); }); } /** * desc:查询报告列表 * * api/Reportty/getReportList * 参数:phone * * * author:wh */ function getReportList(){ return Mmodel::catchJson(function (){ $phone = input('phone'); $obj = Db::table('fa_ty_medical_report'); if($phone){ $obj->where('username',$phone); } $info = $obj->select(); return Tools::set_ok($info); }); } /** * 修改报告 * api/Reportty/editReport * 参数:dataid 报告数据id * username 医生登录账号(必须) name 病人姓名 gender 病人性别: M=男性, F=女性 age 病人年龄 main_complaint 主诉 medical_history 病史 past_history 既往史 allergy_history 过敏史 family_history 家族史 personal_history 个人史 menstrual_marital_history 月经婚育史 diagnosis 诊断 treatment 医嘱 ticket 对话票据 hdrdepartment_id 科室 */ function editReport(){ return Mmodel::catchJson(function (){ $qa_chat_ticket = input('ticket'); if(empty($qa_chat_ticket)){ return Tools::set_fail('qa_chat_ticket必须'); } if(empty(input('username'))){ return Tools::set_fail('医生登录账号必须'); } if(empty(input('name',''))){ return Tools::set_fail('病人姓名必须'); } if(empty(input('phone',''))){ return Tools::set_fail('病人手机号必须'); } if(empty(input('diagnosis'))){ return Tools::set_fail('diagnosis诊断内容必须'); } if(empty(input('gender'))){ return Tools::set_fail('gender必须'); } //听译问诊-患者病历信息 $data = [ 'username'=>input('username'),//医生 'name'=>input('name',''),//病人姓名 'gender'=>input('gender',''),//病人性别: M=男性, F=女性 'age'=>input('age',''),//病人年龄 'main_complaint'=>input('main_complaint','无'),//主诉 'medical_history'=>input('medical_history','无'),//病史 'past_history'=>input('past_history','无'),//既往史 'allergy_history'=>input('allergy_history','无'),//过敏史 'family_history'=>input('family_history','无'),//家族史 'personal_history'=>input('personal_history','无'),//个人史 'menstrual_marital_history'=>input('menstrual_marital_history','无'),//月经婚育史 'diagnosis'=>input('diagnosis','无'),//诊断 'treatment'=>input('treatment','无'),//医嘱 'ticket'=>$qa_chat_ticket, 'hdrdepartment_id'=>input('hdrdepartment_id'),//科室 ]; $hdruserbaseinfo_id = input('hdruserbaseinfo_id'); if(empty(input('hdruserbaseinfo_id'))){ return Tools::set_fail('hdruserbaseinfo_id必须'); } //医生开始对话的token $say_token = input('say_token'); if(empty($say_token)){ return Tools::set_fail('say_token必须'); } //查询统一基本信息 $base_info = Db::table('fa_tt_userbaseinfo') ->where('id',$hdruserbaseinfo_id) ->find(); //校验 if(empty($base_info)){ return Tools::set_fail('统一基本信息不存在'); } //修改历史记录的hdruserbaseinfo_id Db::table('fa_ty_chathistory') ->where('say_token',$say_token) ->update(['hdruserbaseinfo_id'=>$hdruserbaseinfo_id]); //听译问诊-患者病历信息 $medicalrecord = Db::table('fa_ty_userbaseinfo') ->where('name',input('name','')) ->find(); if(empty($medicalrecord)){ $data['ticket'] = $qa_chat_ticket; //新增听译病历信息 $userbaseid = Db::table('fa_ty_userbaseinfo')->insertGetId($data); }else{ $userbaseid = $medicalrecord['id']; Db::table('fa_ty_userbaseinfo') ->where('ticket',$qa_chat_ticket) ->update($data); } $rehabilitation_advice = input('rehabilitation_advice','无');//康复建议 $test_advice = input('test_advice','无');//检测建议 //修改报告 $str = <<where('id',$dataid) ->data([ //病历信息id 'userbaseid'=>$userbaseid,//创建报告的时候这个字段是空,修改报告再补填这个字段 'report_content'=>$str, 'name'=>$data['name'], 'gender'=>$data['gender'], 'hdruserbaseinfo_id'=>$hdruserbaseinfo_id,//统一病历基本信息ID ]) ->update(); return Tools::set_ok(); }); } }