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

731 lines
24 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
namespace app\api\controller;
use think\Db;
use app\common\model\TabConf;
use wanghua\general_utility_tools_php\file\upload\FileUpload;
use wanghua\general_utility_tools_php\gpt\chat\ChatGPT;
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;
use wanghua\general_utility_tools_php\Validate;
use think\Controller;
/**
* 听译用户基本信息
*
* Class Hdruserinfotingyi
* @package app\api\controller
*/
class Hdruserinfotingyi extends BaseHttpApi
{
protected $controller_comments = '统一问诊用户基本信息';
/**
* desc获取统一问诊用户基本信息列表后台病历管理列表
*
* api/Hdruserinfotingyi/getHdruserbaseinfoList
*
* 参数:
* 带分页
* current_page 当前页码
* list_rows 每页显示条数 默认15
* doctor 所属医生
* id ID
* date 日期
* doctor 所属医生
* hdrdepartment_id 科室
* from 来源:num_per=数智人,ty=听译助手,h5=h5网页问诊
* name 病人姓名
*
* 所有字段说明<span style="color: gray">(可能有部分额外字段未在此体现)</span>
* 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=否
* authorwh
*/
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 必须
*
* 所有字段说明<span style="color: gray">(可能有部分额外字段未在此体现)</span>
* 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=否
* authorwh
*/
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 当前用户登录的手机号 【必须】
*
*
* authorwh
*/
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 联系方式 【必须】
*
* 所有字段说明<span style="color: gray">(可能有部分额外字段未在此体现)</span>
* id ID
* hdrdepartment_id 科室
* hdrdepartment 科室名称
* name 病人姓名
* gender 病人性别
* age 病人年龄
* phone 联系方式
* authorwh
*/
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']]);
});
}
}