(可能有部分额外字段未在此体现): * id ID * date 日期 * doctor 所属医生 * hdrdepartment_id 科室 * from 来源:num_per=数智人,ty=听译助手,h5=h5网页问诊 * name 病人姓名 * gender 病人性别 * age 病人年龄 * edu 教育程度 * career_year 职业及年限 * power 体力要求 * satisfaction 经济满意度 * old_career_year 过往职业及年限 * old_career_power 过往职业体力要求 * support 社会支持度 * marriage 婚姻状况 * live 居住情况 * home 家庭关系 * address 地址 * phone 联系方式 * wechat_no 微信号 * ticket 对话票据(数据隔离) * create_time 创建时间 * is_flow 是否接受随访:yes=是,no=否 * author:wh */ function getHdruserbaseinfoList(){ Tools::log_to_write_txt(['获取统一问诊用户基本信息列表(后台病历管理列表) 入参:'=>input()]); $api_desc = '获取统一问诊用户基本信息列表(后台病历管理列表)'; try { $id = input('id'); $date = input('date'); $doctor = input('doctor'); $hdrdepartment_id = input('hdrdepartment_id'); $from = input('from'); $name = input('name'); $model_obj = Db::table(TabConf::$fa_ty_userbaseinfo); if(input('doctor')){ $model_obj->whereLike('doctor','%'.input('doctor').'%'); } if(input('id')){ $model_obj->where('id',input('id')); } if(input('date')){ $model_obj->where('date',input('date')); } if(input('hdrdepartment_id')){ $model_obj->where('hdrdepartment_id',input('hdrdepartment_id')); } if(input('from')){ $model_obj->where('from',input('from')); } if(input('name')){ $model_obj->where('name',input('name')); } $data = $model_obj->paginate(['page'=>input('current_page',1),'list_rows'=>input('list_rows',15)]) ->each(function($item, $key){ return $item; }); // ['total'] => int(30) // ['per_page'] => int(15) // ['current_page'] => int(1) // ['last_page''] => int(2) $data = $data->toArray();//包含 data列表 return json(Tools::set_ok('ok',$data)); }catch(\Exception $e){ Tools::log_to_write_txt([ 'error'=>'获取统一问诊用户基本信息列表(后台病历管理列表).异常.'.$e->getMessage(), '参数'=>input(), 'error_info'=>$e->getTraceAsString() ]); return json(Tools::set_res(500,'操作异常',[])); } } /** * desc:获取统一问诊用户基本信息详情(后台病历管理详情) * * api/Hdruserinfotingyi/getHdruserbaseinfoDetailById * * 参数: * id ID ID 必须 * * 所有字段说明(可能有部分额外字段未在此体现): * id ID * date 日期 * doctor 所属医生 * hdrdepartment_id 科室 * from 来源:num_per=数智人,ty=听译助手,h5=h5网页问诊 * name 病人姓名 * gender 病人性别 * age 病人年龄 * edu 教育程度 * career_year 职业及年限 * power 体力要求 * satisfaction 经济满意度 * old_career_year 过往职业及年限 * old_career_power 过往职业体力要求 * support 社会支持度 * marriage 婚姻状况 * live 居住情况 * home 家庭关系 * address 地址 * phone 联系方式 * wechat_no 微信号 * ticket 对话票据(数据隔离) * create_time 创建时间 * is_flow 是否接受随访:yes=是,no=否 * author:wh */ function getHdruserbaseinfoDetailById(){ Tools::log_to_write_txt(['获取统一问诊用户基本信息详情(后台病历管理详情) 入参:'=>input()]); $api_desc = '获取统一问诊用户基本信息详情(后台病历管理详情)'; try { $id = input('id'); if(empty($id)){ return json(Tools::set_fail('id参数错误')); } $model_obj = Db::table(TabConf::$fa_ty_userbaseinfo); if(input('id')){ $model_obj->where('id',input('id')); } $item = $model_obj->find(); $data = $item; return json(Tools::set_ok('ok',$data)); }catch(\Exception $e){ Tools::log_to_write_txt([ 'error'=>'获取统一问诊用户基本信息详情(后台病历管理详情).异常.'.$e->getMessage(), '参数'=>input(), 'error_info'=>$e->getTraceAsString() ]); return json(Tools::set_res(500,'操作异常',[])); } } /** * 根据id修改统一问诊用户基本信息 * 参数: * id ID 【必须】 * name 病人姓名 * gender 病人性别 * age 病人年龄 * edu 教育程度 * career_year 职业及年限 * power 体力要求 * satisfaction 经济满意度 * old_career_year 过往职业及年限 * old_career_power 过往职业体力要求 * support 社会支持度 * marriage 婚姻状况 * live 居住情况 * home 家庭关系 * address 地址 * phone 联系方式 * wechat_no 微信号 * api/Hdruserinfotingyi/updateHdruserbaseinfoById */ function updateHdruserbaseinfoById(){ Tools::log_to_write_txt(['修改统一问诊用户基本信息'=>input()]); $api_desc = '修改统一问诊用户基本信息'; Db::startTrans(); try { $name = input('name'); $gender = input('gender'); $age = input('age'); $edu = input('edu'); $career_year = input('career_year'); $power = input('power'); $satisfaction = input('satisfaction'); $old_career_year = input('old_career_year'); $old_career_power = input('old_career_power'); $support = input('support'); $marriage = input('marriage'); $live = input('live'); $home = input('home'); $address = input('address'); $phone = input('phone'); $wechat_no = input('wechat_no'); if(empty(input('id'))){ return json(Tools::set_fail('参数错误。0',['error_msg'=>'错误信息:id错误'])); } //存在则修改 $data = []; if($name){ $data['name'] = $name; } if($gender){ $data['gender'] = $gender; } if($age){ $data['age'] = $age; } if($edu){ $data['edu'] = $edu; } if($career_year){ $data['career_year'] = $career_year; } if($power){ $data['power'] = $power; } if($satisfaction){ $data['satisfaction'] = $satisfaction; } if($old_career_year){ $data['old_career_year'] = $old_career_year; } if($old_career_power){ $data['old_career_power'] = $old_career_power; } if($support){ $data['support'] = $support; } if($marriage){ $data['marriage'] = $marriage; } if($live){ $data['live'] = $live; } if($home){ $data['home'] = $home; } if($address){ $data['address'] = $address; } if($phone){ $data['phone'] = $phone; } if($wechat_no){ $data['wechat_no'] = $wechat_no; } $hdrdepartment = input('hdrdepartment'); if($hdrdepartment){ $data['hdrdepartment'] = $hdrdepartment; } $hdrdepartment_id = input('hdrdepartment_id'); if($hdrdepartment_id){ $data['hdrdepartment_id'] = $hdrdepartment_id; } $dataid = Db::table(TabConf::$fa_ty_userbaseinfo) ->data($data) ->where('id',input('id')) ->update(); //$this->operateLog('修改统一问诊用户基本信息',api_user_info('id')); Db::commit(); return json(Tools::set_ok('ok',$dataid)); }catch (\Exception $e){ Db::rollback(); Tools::log_to_write_txt([ 'error'=>'修改统一问诊用户基本信息.异常.'.$e->getMessage(), 'input'=>input(), 'error_info'=>$e->getTraceAsString() ]); return json(Tools::set_fail()); } } /** * 新增统一问诊用户基本信息 * * 参数: * date 日期 【必须】 * doctor 所属医生 【必须】 * hdrdepartment_id 科室 【必须】 * from 来源:num_per=数智人,ty=听译助手,h5=h5网页问诊,doc_add=医生添加 【必须】 * name 病人姓名 【必须】 * gender 病人性别 【必须】 * age 病人年龄 【必须】 * edu 教育程度 * career_year 职业及年限 * power 体力要求 * satisfaction 经济满意度 * old_career_year 过往职业及年限 * old_career_power 过往职业体力要求 * support 社会支持度 * marriage 婚姻状况 * live 居住情况 * home 家庭关系 * address 地址 * phone 联系方式 【必须】 * wechat_no 微信号 * ticket 对话票据(数据隔离) * diagnosis 诊断 */ function addHdruserbaseinfo(){ Tools::log_to_write_txt(['新增统一问诊用户基本信息'=>input()]); $api_desc = '新增统一问诊用户基本信息'; Db::startTrans(); try { $date = input('date'); if(empty($date)){ return json(Tools::set_fail('参数错误.0',['error_msg'=>'错误信息:date错误'])); } $doctor = input('doctor'); if(empty($doctor)){ return json(Tools::set_fail('参数错误.1',['error_msg'=>'错误信息:doctor错误'])); } $hdrdepartment_id = input('hdrdepartment_id'); if(empty($hdrdepartment_id)){ return json(Tools::set_fail('参数错误.2',['error_msg'=>'错误信息:hdrdepartment_id错误'])); } $from = input('from'); if(empty($from)){ return json(Tools::set_fail('参数错误.3',['error_msg'=>'错误信息:from错误'])); } $name = input('name'); if(empty($name)){ return json(Tools::set_fail('参数错误.4',['error_msg'=>'错误信息:name错误'])); } $gender = input('gender'); if(empty($gender)){ return json(Tools::set_fail('参数错误.5',['error_msg'=>'错误信息:gender错误'])); } $age = input('age'); if(empty($age)){ return json(Tools::set_fail('参数错误.6',['error_msg'=>'错误信息:age错误'])); } $edu = input('edu'); $career_year = input('career_year'); $power = input('power'); $satisfaction = input('satisfaction'); $old_career_year = input('old_career_year'); $old_career_power = input('old_career_power'); $support = input('support'); $marriage = input('marriage'); $live = input('live'); $home = input('home'); $address = input('address'); $phone = input('phone'); if(empty($phone)){ return json(Tools::set_fail('参数错误.18',['error_msg'=>'错误信息:phone错误'])); } $wechat_no = input('wechat_no'); $ticket = input('ticket'); $diagnosis = input('diagnosis'); $data = [ 'date'=>$date?:'', 'doctor'=>$doctor?:'', 'hdrdepartment_id'=>$hdrdepartment_id?:'', 'from'=>$from?:'', 'name'=>$name?:'', 'gender'=>$gender?:'', 'age'=>$age?:'', 'edu'=>$edu?:'', 'career_year'=>$career_year?:'', 'power'=>$power?:'', 'satisfaction'=>$satisfaction?:'', 'old_career_year'=>$old_career_year?:'', 'old_career_power'=>$old_career_power?:'', 'support'=>$support?:'', 'marriage'=>$marriage?:'', 'live'=>$live?:'', 'home'=>$home?:'', 'address'=>$address?:'', 'phone'=>$phone?:'', 'wechat_no'=>$wechat_no?:'', 'ticket'=>$ticket?:'', 'diagnosis'=>$diagnosis?:'', ]; $dataid = Db::table(TabConf::$fa_tt_userbaseinfo)->insertGetId($data); //$this->operateLog('新增统一问诊用户基本信息',api_user_info('id')); Db::commit(); return json(Tools::set_ok('ok',$dataid)); }catch (\Exception $e){ Db::rollback(); Tools::log_to_write_txt([ 'error'=>'新增统一问诊用户基本信息.异常.'.$e->getMessage(), 'input'=>input(), 'error_info'=>$e->getTraceAsString() ]); return json(Tools::set_fail()); } } /** * desc:保存用户基本信息,没有就新增 * * * 参数: * doctor 所属医生 【必须】 * hdrdepartment_id 科室 【必须】 * name 病人姓名 【必须】 * gender 病人性别 【必须】 * age 病人年龄 【必须】 * phone 图片识别联系方式 * user_phone 当前用户登录的手机号 【必须】 * * * author:wh */ function saveBaseinfo(){ Tools::log_to_write_txt(['保存用户基本信息,没有就新增'=>input()]); $api_desc = '保存用户基本信息,没有就新增'; Db::startTrans(); try { $hdrdepartment_id = input('hdrdepartment_id'); if(empty($hdrdepartment_id)){ return json(Tools::set_fail('参数错误.2',['error_msg'=>'错误信息:hdrdepartment_id错误'])); } $name = input('name'); if(empty($name)){ return json(Tools::set_fail('参数错误.4',['error_msg'=>'错误信息:name错误'])); } $gender = input('gender'); if(empty($gender)){ return json(Tools::set_fail('参数错误.5',['error_msg'=>'错误信息:gender错误'])); } $age = input('age'); if(empty($age)){ return json(Tools::set_fail('参数错误.6',['error_msg'=>'错误信息:age错误'])); } $doctor = input('doctor'); if(empty($doctor)){ return json(Tools::set_fail('参数错误.3',['error_msg'=>'错误信息:doctor手机号错误'])); } $hdrdepartment = input('hdrdepartment'); $phone = input('phone'); if(empty($phone)){ return json(Tools::set_fail('参数错误.18',['error_msg'=>'错误信息:phone错误'])); } $data = [ 'hdrdepartment_id'=>$hdrdepartment_id?:'', 'name'=>$name?:'', 'gender'=>$gender?:'', 'age'=>$age?:'', 'phone'=>$phone?:'', 'hdrdepartment'=>$hdrdepartment?:'', 'user_phone'=>api_user_info('username') ]; //同步科室(没有则新增) $department_data = [ 'name'=>$hdrdepartment, ]; $insert_hdrdepartment_id = Mmodel::existsUpdateInsert(TabConf::$fa_hdrdepartment,[ 'name'=>$hdrdepartment ],$department_data); if($insert_hdrdepartment_id){ $data['hdrdepartment_id'] = $insert_hdrdepartment_id; } //同步基本信息到fa_tt_userbaseinfo表 $base_info_data = [ 'date'=>Tools::get_now_date(), 'doctor'=>$doctor, 'hdrdepartment_id'=>$hdrdepartment_id, 'hdrdepartment'=>$hdrdepartment, 'name'=>$name, 'gender'=>$gender, 'age'=>$age, 'phone'=>$phone, 'user_phone'=>api_user_info('username'), 'from'=>'h5', ]; //只能新增基本信息,不能修改 $base_info_data_id = Db::table(TabConf::$fa_ty_userbaseinfo) ->insertGetId($base_info_data); Db::commit(); return json(Tools::set_ok('ok',['base_info_data_id'=>$base_info_data_id])); }catch (\Exception $e){ Db::rollback(); Tools::log_to_write_txt([ 'error'=>'保存用户基本信息,没有就新增.异常.'.$e->getMessage(), 'input'=>input(), 'error_info'=>$e->getTraceAsString() ]); return json(Tools::set_fail()); } } /** * desc:根据手机号码获取统一问诊用户基本信息,查询最新的一条数据 * * api/Hdruserinfotingyi/getHdruserbaseinfoByPhone * * 参数: * phone 联系方式 【必须】 * * 所有字段说明(可能有部分额外字段未在此体现): * id ID * hdrdepartment_id 科室 * hdrdepartment 科室名称 * name 病人姓名 * gender 病人性别 * age 病人年龄 * phone 联系方式 * author:wh */ function getHdruserbaseinfoByPhone(){ Tools::log_to_write_txt(['根据手机号码获取统一问诊用户基本信息 入参:'=>input()]); $api_desc = '根据手机号码获取统一问诊用户基本信息'; try { $phone = input('phone'); if(empty($phone)){ return json(Tools::set_fail('参数错误.0',['error_msg'=>'错误信息:phone错误'])); } $model_obj = Db::table(TabConf::$fa_ty_userbaseinfo); $model_obj->order('id desc'); if(input('phone')){ $model_obj->where('user_phone',input('phone')); } $item = $model_obj->find(); $data = $item; return json(Tools::set_ok('ok',$data)); }catch(\Exception $e){ Tools::log_to_write_txt([ 'error'=>'根据手机号码获取统一问诊用户基本信息.异常.'.$e->getMessage(), '参数'=>input(), 'error_info'=>$e->getTraceAsString() ]); return json(Tools::set_res(500,'操作异常',[])); } } /** * 基本信息读取 * 基本信息读取接口(传图片地址) * * 参数: * phone 患者手机号码 * * 文件上传控件name值设置为:file_upload,否则无法上传 * */ public function getBaseInfoUploadRead(){ return Mmodel::catchJson(function (){ //基本信息读取接口(传图片地址)【一张图片一个chatid】 $phone = input('phone'); if(empty($phone)){ return Tools::set_fail('参数错误.0',['error_msg'=>'错误信息:phone错误']); } $sessionid = input('sessionid'); if(empty($sessionid)){ return Tools::set_fail( '参数错误.1',['error_msg'=>'错误信息:sessionid错误']); } //存在没有生成报告的上传的基本信息就删除 Db::table(TabConf::$fa_hdruserbaseinfo_upload) ->where('user_phone',$phone) ->where('status','new') ->delete(); $oss_config = config('aliyun_oss_config'); $file_obj = new FileUpload(); $file_res = $file_obj->fileUploadToAliCloudOss($oss_config); Tools::log_to_write_txt(['文件上传结果'=>$file_res]); if($file_res['code']!=200){ return Tools::set_fail($file_res['msg']); } $upload_data = $file_res['data'][0]; $upload_data['sessionid'] = $sessionid; $upload_data['phone'] = $phone; $upload_data['user_phone'] = $phone; //保存图片信息,存在则更新 $hdruserbaseinfo_upload_id = Db::table(TabConf::$fa_hdruserbaseinfo_upload) ->insertGetId($upload_data); //ai分析 $ai_config = config('basic_information_read_config'); $chatobj = new ChatGPT(); $chatobj->url = $ai_config['base_url']; $chatobj->model = ''; $chatobj->apiKey = $ai_config['APIKey']; $answer_json_arr = []; $config = [ 'stream'=>false, 'chatId'=>Tools::getMillisecond(), ]; $sub_content_msg = [ [ "role" => "user", "content" => [ [ "type" => "image_url", "image_url" => [ "url" => $file_res['data'][0]['outer_req_url'] ] ] ] ] ]; //chatGpt设置前置聊天上下文 $chatobj->setBefore($sub_content_msg); $question = ''; //回答 $chatobj->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]); //保存处理结果 $answer_result = json_decode($answer_json_arr[0],true); $ai_result_data = [ 'result'=>$answer_result['choices'][0]['message']['content'] ]; //保存ai分析结果 Db::table(TabConf::$fa_hdruserbaseinfo_upload) ->where('id',$hdruserbaseinfo_upload_id) ->data($ai_result_data) ->update(); unset($file_res['data'][0]['real_path']); //返回分析结果 return Tools::set_ok('ok',['result'=>$answer_result['choices'][0]['message']['content'],'file_info'=>$file_res['data']]); }); } }