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,72 @@
<?php
/*
* description
* authorwh
* email
* createTime{2023/1/21} {16:22}
*/
namespace app\api\controller;
use app\common\model\TabConf;
use think\Controller;
use think\Db;
use think\Request;
use wanghua\general_utility_tools_php\framework\BaseController;
use wanghua\general_utility_tools_php\tool\Tools;
class BaseCommonController extends BaseController
{
function __construct()
{
parent::__construct();
}
/**
* desc检查路径维护状态
*
* “===”完全匹配不能使用like
*
* authorwh
*/
protected function checkMaintain(){
$configs = Db::table(TabConf::$fa_sys_maintain_config)
->where('status','1')
->cache()
->select();
//模块
$strmodule = request()->module();
foreach ($configs as $config){
if($strmodule == $config['url']){
//模块维护中
return ['is_maintain'=>true,'msg'=>$config['msg'],'openid'=>$config['openid']];
}
}
//模块/控制器
$strcontroller = strtolower(request()->module().'/'.request()->controller());
foreach ($configs as $config){
if($strcontroller == $config['url']){
//模块维护中
return ['is_maintain'=>true,'msg'=>$config['msg'],'openid'=>$config['openid']];
}
}
//模块/控制器/方法
$straction = strtolower(request()->module().'/'.request()->controller().'/'.request()->action());
foreach ($configs as $config){
if($straction == $config['url']){
//模块维护中
return ['is_maintain'=>true,'msg'=>$config['msg'],'openid'=>$config['openid']];
}
}
//未维护
return ['is_maintain'=>false,'msg'=>'服务运行中'];
}
}

View File

@@ -0,0 +1,34 @@
<?php
/*
* description
* authorwh
* email
* createTime{2024/4/22} {11:52}
*/
namespace app\api\controller;
use app\index\controller\BaseCommonController;
use think\App;
use think\Controller;
use think\Exception;
use wanghua\general_utility_tools_php\tool\Ip;
class BaseHttpApi extends BaseCommonController
{
/**
http请求专用
*/
public function __construct()
{
parent::__construct();
//ip校验
//$ip = request()->ip();
//$res = Ip::ip_is_china($ip,false);
//if(!$res){
// throw new Exception('ip不合法');
//}
}
}

View File

@@ -0,0 +1,34 @@
<?php
/*
* description
* authorwh
* email
* createTime{2024/4/5} {19:55}
*/
namespace app\api\controller;
class BaseWssApi extends BaseCommonController
{
/**
* descsocket专用json格式
*
* authorwh
* @param $action
* @param string $msg
* @param array $items
* @param string $method
* @return false|string
*/
static function json_wss($action,$msg='', $items=[], $method='response'){
$json = [
'action'=>$action,
'method'=>$method,
'msg'=>$msg,
'items'=>$items
];
return json_encode($json, JSON_UNESCAPED_UNICODE);
}
}

View File

@@ -0,0 +1,49 @@
<?php
/*
* description
* authorwh
* email
* createTime{2024/8/13} {17:27}
*/
namespace app\api\controller;
use wanghua\general_utility_tools_php\Mmodel;
use wanghua\general_utility_tools_php\tool\Tools;
class Common extends BaseHttpApi
{
/**
* desc唯一id
* 参数:无
*
* api/Common/getUniqueId
*
* authorwh
*/
function getUniqueId(){
return Mmodel::catchJson(function (){
$uniqueid = md5(Tools::getMillisecond());
return Tools::set_ok('ok',['uniqueid'=>$uniqueid]);
});
}
/**
* desc获取对话token在听译对话开始之前调用用于隔离聊天记录
* 参数:无
*
* api/Common/getSayToken
*
* authorwh
*/
function getSayToken(){
return Mmodel::catchJson(function (){
$uniqueid = md5(Tools::getMillisecond());
return Tools::set_ok('ok',['uniqueid'=>$uniqueid]);
});
}
}

View File

@@ -0,0 +1,103 @@
<?php
/*
* description
* authorwh
* email
* createTime{2024/11/27} {10:11}
*/
namespace app\api\controller;
use app\common\model\TabConf;
use think\Db;
use wanghua\general_utility_tools_php\http\Curl;
use wanghua\general_utility_tools_php\Mmodel;
use wanghua\general_utility_tools_php\tool\Tools;
class Drugsimagesmedicaltasknotify extends BaseHttpApi
{
/**
* desc药品CT病例上传AI分析任务回调地址
*
* 回调地址会在请求ai接口时传递
*(参考):
* 线上域名https://ybx_prediagnosis.excn.top
* /api/Drugsimagesmedicaltasknotify/notify
*
* method: post
*
* 数据结构建议:
* {
* "code":200,//500(失败、异常、错误),可以是其它有意义的值
* "msg":'提示信息',//eg处理成功、请求失败处理中等
* "data":[],//该值可以是任意数据eg数组、字符串等
* }
*
* authorwh
*/
function notify(){
return Mmodel::catchJson(function (){
Tools::log_to_write_txt(['药品CT病例上传AI分析任务回调入参'=>input()]);
$this->notify_test();
});
}
private function notify_test(){
$jsondecode = input();
$task_id = $jsondecode['task_id'];
$result = $jsondecode['result'];
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']);
//}
if(isset($result['detail']) && $result['detail'] == '未知的任务 ID'){
return Tools::set_fail($result['detail']);
}
if(isset($result['status']) && $result['status'] == 'pending'){
return Tools::set_fail('处理中请等待');
}
//if(!isset($result['result']) || $result['result'] == ''){
// return Tools::set_fail('未查询到结果');
//}
//保存处理结果
Db::table(TabConf::$fa_drugs_images_medical_task)
->data([
'result'=>json_encode($jsondecode),
])
->where('task_id',$task_id)
->update();
//遍历二维数组,将每张图片的分析同步到
foreach ($result as $item){
Db::table(TabConf::$fa_drugs_images_medical_result)
->where('imageid',$item['id'])
->data([
'ai_result'=>$item['result'],
'type'=>$item['type'],
])
->update();
}
return Tools::set_ok('ok',$result);
}
}

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));
});
}
}

View File

@@ -0,0 +1,253 @@
<?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\Mmodel;
use wanghua\general_utility_tools_php\tool\Tools;
use think\Controller;
class Guliangqarecord extends BaseHttpApi
{
protected $controller_comments = '估量-问答记录';
/**
* desc估量量表会话记录ai处理
*
* api/Guliangqarecord/guliangSessionDeal
* 参数:
* sessionid 会话id
* phone 手机
* name 姓名
*
* authorwh
*/
function guliangSessionDeal(){
return Mmodel::catch(function (){
//会话id
$sessionid = input('sessionid');
if(empty($sessionid)){
return json(Tools::set_fail('参数错误.0',['error_msg'=>'sessionid(会话id)不能为空通过getUniqueId接口获取']));
}
$phone = input('phone');
if(empty($phone)){
return json(Tools::set_fail('参数错误.1',['error_msg'=>'phone(手机号)不能为空']));
}
$name = input('name');
if(empty($name)){
return json(Tools::set_fail('参数错误.2',['error_msg'=>'name(姓名)不能为空']));
}
//content
//根据会话id查询对话记录
$guliang_record_list = Db::table(TabConf::$fa_guliangqarecord)
->where('sessionid',$sessionid)
->select();
if(empty($guliang_record_list)){
return json(Tools::set_fail('参数错误.3',['error_msg'=>'未查询到对话记录']));
}
//ai生成报告
$report_config = config('scale_processing_ai_config');
$chatobj = new ChatGPT();
$chatobj->url = $report_config['base_url'];
$chatobj->model = '';
$chatobj->apiKey = $report_config['APIKey'];
$answer_json_arr = [];
$date = date('Y-m-d');
$ctn_msg_str = <<<EOF
用户姓名:{$name} 用户手机号:{$phone}
日期:{$date} 会话ID{$sessionid}
EOF;
foreach ($guliang_record_list as $k=>$val){
$ctn_msg_str .= "\n 问题($k)".$val['guliangquestion'];
$ctn_msg_str .= "\n 答案选项:".$val['choose'];
$ctn_msg_str .= "\n 用户选择项:".$val['answer']?:'未回答';
}
$sub_content_msg = [
["role" => "user", "content" => $ctn_msg_str]
];
$config = [
'stream'=>false,
'chatId'=>Tools::getMillisecond(),
];
//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);
$data = [
'sessionid'=>$sessionid,//不可以重复
'phone'=>$guliang_record_list[0]['phone'],//可以重复
'name'=>$guliang_record_list[0]['name'],//可以重复
'content'=>$answer_result['choices'][0]['message']['content'],
];
//一个手机可以有多个处理结果,但一个会话只能有一个处理结果
Mmodel::existsUpdateInsert(TabConf::$fa_guliang_ai_deal_result,['sessionid'=>$sessionid],$data);
return json(Tools::set_ok());
});
}
/**
* 新增估量-问答记录
*
* 参数:
* sessionid 会话id
* gulianguser_id 估量-用户ID
* name 用户姓名
* phone 手机号
* guliangquestion 用户选择的问题
* choose 可选项
* answer 回答选项(逗号隔开)
* api/Guliangqarecord/addGuliangqarecord
*/
function addGuliangqarecord(){
Tools::log_to_write_txt(['新增估量-问答记录'=>input()]);
$api_desc = '新增估量-问答记录';
Db::startTrans();
try {
//会话id
$sessionid = input('sessionid');
if(empty($sessionid)){
return json(Tools::set_fail('参数错误.0',['error_msg'=>'sessionid(会话id)不能为空通过getUniqueId接口获取']));
}
$gulianguser_id = input('gulianguser_id');
$guliangquestion = input('guliangquestion');
$choose = input('choose');
$answer = input('answer');
$name = input('name');
$phone = input('phone');
if(empty($name)){
return json(Tools::set_fail('姓名不能为空'));
}
if(empty($phone)){
return json(Tools::set_fail('手机号不能为空'));
}
$data = [
'gulianguser_id'=>$gulianguser_id?:'',
'guliangquestion'=>$guliangquestion?:'',
'choose'=>$choose?:'',
'answer'=>$answer?:'',
'name'=>$name?:'',
'phone'=>$phone?:'',
'sessionid'=>$sessionid?:'',
];
$dataid = Db::table(TabConf::$fa_guliangqarecord)->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获取估量-问答记录
*
* api/Guliangqarecord/getGuliangqarecordList
*
* 参数:
* 带分页
* current_page 当前页码
* list_rows 每页显示条数 默认15
* guliangquestion 用户选择的问题
* gulianguser_id 估量-用户ID
* guliangquestion 用户选择的问题
* name 姓名
* phone 手机号
*
* 所有字段说明<span style="color: gray">(可能有部分额外字段未在此体现)</span>
* id ID
* gulianguser_id 估量-用户ID
* guliangquestion 用户选择的问题
* choose 回答选项
* answer 回答选项(逗号隔开)
* name 姓名
* phone 手机号
* create_time 创建时间
* authorwh
*/
function getGuliangqarecordList(){
Tools::log_to_write_txt(['获取估量-问答记录 入参:'=>input()]);
$api_desc = '获取估量-问答记录';
try {
$gulianguser_id = input('gulianguser_id');
$guliangquestion = input('guliangquestion');
$name = input('name');
$phone = input('phone');
$model_obj = Db::table(TabConf::$fa_guliangqarecord);
if(input('guliangquestion')){
$model_obj->whereLike('guliangquestion','%'.input('guliangquestion').'%');
}
if(input('gulianguser_id')){
$model_obj->where('gulianguser_id',input('gulianguser_id'));
}
if(input('name')){
$model_obj->where('name',input('name'));
}
if(input('phone')){
$model_obj->where('phone',input('phone'));
}
$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,'操作异常',[]));
}
}
}

View File

@@ -0,0 +1,81 @@
<?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\tool\Tools;
use wanghua\general_utility_tools_php\Validate;
use think\Controller;
class Guliangquestion extends BaseHttpApi
{
protected $controller_comments = '估量-问答配置';
/**
* desc获取估量-问答配置
*
* api/Guliangquestion/getGuliangquestionList
*
* 参数:
* 带分页
* current_page 当前页码
* list_rows 每页显示条数 默认15
* name 问题
* answer 答案
*
* 所有字段说明<span style="color: gray">(可能有部分额外字段未在此体现)</span>
* id ID
* name 问题
* answer 答案
* authorwh
*/
function getGuliangquestionList(){
Tools::log_to_write_txt(['获取估量-问答配置 入参:'=>input()]);
$api_desc = '获取估量-问答配置';
try {
$name = input('name');
$answer = input('answer');
$model_obj = Db::table(TabConf::$fa_guliangquestion);
if(input('name')){
$model_obj->where('name',input('name'));
}
if(input('answer')){
$model_obj->where('answer',input('answer'));
}
$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,'操作异常',[]));
}
}
}

View File

@@ -0,0 +1,128 @@
<?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\Mmodel;
use wanghua\general_utility_tools_php\tool\Tools;
use think\Controller;
class Gulianguser extends BaseHttpApi
{
protected $controller_comments = '估量-用户';
/**
* 新增估量-用户
*
* 参数:
* name 姓名 【必须】
* phone 手机号 【必须】
* api/Gulianguser/addGulianguser
*/
function addGulianguser(){
Tools::log_to_write_txt(['新增估量-用户'=>input()]);
$api_desc = '新增估量-用户';
Db::startTrans();
try {
$name = input('name');
if(empty($name)){
return json(Tools::set_fail('参数错误.0',['error_msg'=>'错误信息name错误']));
}
$phone = input('phone');
if(empty($phone)){
return json(Tools::set_fail('参数错误.1',['error_msg'=>'错误信息phone错误']));
}
$data = [
'name'=>$name?:'',
'phone'=>$phone?:'',
];
$dataid = Mmodel::existsUpdateInsert(TabConf::$fa_gulianguser,['phone'=>$phone],$data);
//$dataid = Db::table(TabConf::$fa_gulianguser)->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获取估量-用户
*
* api/Gulianguser/getGulianguserList
*
* 参数:
* name 姓名
* phone 手机号
*
* 所有字段说明<span style="color: gray">(可能有部分额外字段未在此体现)</span>
* id ID
* name 姓名
* phone 手机号
* authorwh
*/
function getGulianguserList(){
Tools::log_to_write_txt(['获取估量-用户 入参:'=>input()]);
$api_desc = '获取估量-用户';
try {
$name = input('name');
$phone = input('phone');
$model_obj = Db::table(TabConf::$fa_gulianguser);
if(input('name')){
$model_obj->where('name',input('name'));
}
if(input('phone')){
$model_obj->where('phone',input('phone'));
}
//$model_obj->field('name,phone');
$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,'操作异常',[]));
}
}
}

View File

@@ -0,0 +1,66 @@
<?php
/*
* description
* authorwh
* email
* createTime{2024/8/7} {13:50}
*/
namespace app\api\controller;
use app\common\model\TabConf;
use think\Db;
use wanghua\general_utility_tools_php\Mmodel;
use wanghua\general_utility_tools_php\tool\Tools;
class Hdradmin extends BaseHttpApi
{
/**
* desc管理员登录
* api/Hdradmin/adminLogin
* authorwh
*/
function adminLogin(){
return Mmodel::catchJson(function (){
$username = input('username');
if(empty($username)){
return Tools::set_fail('参数错误:1');
}
$password = input('password');
if(empty($password)){
return Tools::set_fail('参数错误:2');
}
$user = Db::table(TabConf::$fa_hdradmin)
->where('username',$username)
->find();
if(empty($user)){
return Tools::set_fail('用户不存在');
}
if($password != $user['password']){
return Tools::set_fail('密码错误');
}
//session('api_user_info',$user);
unset($user['password']);
$expires = 7*86400+time();//报告完成之后重新获取票据
//返回票据
$ticketstr = md5($user['username'].$expires);
//修改有效期
Db::table('fa_hdradmin')
->data([
'ticket'=>$ticketstr,
'expires'=>$expires,//7天
])
->where('username',$username)
->update();
return Tools::set_ok('登录成功',['ticket'=>$ticketstr,'user'=>$user]);
});
}
}

View File

@@ -0,0 +1,59 @@
<?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\tool\Tools;
use wanghua\general_utility_tools_php\Validate;
use think\Controller;
class Hdrdepartment extends BaseHttpApi
{
protected $controller_comments = '科室';
/**
* desc获取科室
*
* api/Hdrdepartment/getHdrdepartmentList
*
* 参数:
*
* 所有字段说明<span style="color: gray">(可能有部分额外字段未在此体现)</span>
* id ID
* name 科室名称
* authorwh
*/
function getHdrdepartmentList(){
Tools::log_to_write_txt(['获取科室 入参:'=>input()]);
$api_desc = '获取科室';
try {
$model_obj = Db::table(TabConf::$fa_hdrdepartment);
$data = $model_obj->select();
if(empty($data)){
return json(Tools::set_ok('ok',$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,'操作异常',[]));
}
}
}

View File

@@ -0,0 +1,291 @@
<?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\tool\Tools;
use think\Controller;
class Hdrdoctorusers extends BaseHttpApi
{
protected $controller_comments = '医生账户信息';
/**
* 新增医生账户信息
*
* 参数:
* doctor 医生昵称(杨教授) 医生昵称(杨教授) 必须
* username 用户名(手机号) 用户名(手机号) 必须
* hdrdepartment_id 科室 科室 必须
* name 姓名(杨玉环) 姓名(杨玉环) 必须
* password 密码a123456 密码a123456 必须
* api/Hdrdoctorusers/addHdrdoctorusers
*/
function addHdrdoctorusers(){
Tools::log_to_write_txt(['新增医生账户信息'=>input()]);
$api_desc = '新增医生账户信息';
Db::startTrans();
try {
$doctor = input('doctor');
if(empty($doctor)){
return json(Tools::set_fail('参数错误.0'));
}
$username = input('username');
if(empty($username)){
return json(Tools::set_fail('参数错误.1'));
}
$hdrdepartment_id = input('hdrdepartment_id');
if(empty($hdrdepartment_id)){
return json(Tools::set_fail('参数错误.2'));
}
$name = input('name');
if(empty($name)){
return json(Tools::set_fail('参数错误.3'));
}
$password = input('password');
if(empty($password)){
return json(Tools::set_fail('参数错误.4'));
}
$data = [
'doctor'=>$doctor?:'',
'username'=>$username?:'',
'hdrdepartment_id'=>$hdrdepartment_id?:'',
'name'=>$name?:'',
'password'=>$password?:'',
];
$dataid = Db::table(TabConf::$fa_hdrdoctorusers)->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());
}
}
/**
* 修改医生账户信息
* 参数:
* id ID ID 必须
* doctor 医生昵称(杨教授)
* username 用户名(手机号)
* hdrdepartment_id 科室
* name 姓名(杨玉环)
* password 密码a123456
* sex 性别
* age 年龄
* address 住址
* api/Hdrdoctorusers/updateHdrdoctorusers
*/
function updateHdrdoctorusers(){
Tools::log_to_write_txt(['修改医生账户信息'=>input()]);
$api_desc = '修改医生账户信息';
Db::startTrans();
try {
$doctor = input('doctor');
$username = input('username');
$hdrdepartment_id = input('hdrdepartment_id');
$name = input('name');
$password = input('password');
$sex = input('sex');
$age = input('age');
$address = input('address');
if(empty(input('id'))){
return json(Tools::set_fail('参数错误。0'));
}
$data = [
'doctor'=>$doctor?:'',
'username'=>$username?:'',
'hdrdepartment_id'=>$hdrdepartment_id?:'',
'name'=>$name?:'',
'password'=>$password?:'',
'sex'=>$sex?:'',
'age'=>$age?:'',
'address'=>$address?:'',
];
$dataid = Db::table(TabConf::$fa_hdrdoctorusers)
->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());
}
}
/**
* desc获取医生账户信息
*
* api/Hdrdoctorusers/getHdrdoctorusersList
*
* 参数:
* 带分页
* current_page 当前页码
* list_rows 每页显示条数 默认15
* doctor 医生昵称(杨教授)
* name 姓名(杨玉环)
* doctor 医生昵称(杨教授)
* username 用户名(手机号)
* hdrdepartment_id 科室
* name 姓名(杨玉环)
*
* 所有字段说明<span style="color: gray">(可能有部分额外字段未在此体现)</span>
* id ID
* doctor 医生昵称(杨教授)
* username 用户名(手机号)
* hdrdepartment_id 科室
* name 姓名(杨玉环)
* password 密码a123456
* sex 性别
* age 年龄
* type 用户类型:user=用户,doc=医生
* address 住址
* clientid 客户端ID
* expires 有效期
* ticket 票据
* create_time 创建时间
* authorwh
*/
function getHdrdoctorusersList(){
Tools::log_to_write_txt(['获取医生账户信息 入参:'=>input()]);
$api_desc = '获取医生账户信息';
try {
$doctor = input('doctor');
$username = input('username');
$hdrdepartment_id = input('hdrdepartment_id');
$name = input('name');
$model_obj = Db::table(TabConf::$fa_hdrdoctorusers);
if(input('doctor')){
$model_obj->whereLike('doctor','%'.input('doctor').'%');
}
if(input('name')){
$model_obj->whereLike('name','%'.input('name').'%');
}
if(input('doctor')){
$model_obj->where('doctor',input('doctor'));
}
if(input('username')){
$model_obj->where('username',input('username'));
}
if(input('hdrdepartment_id')){
$model_obj->where('hdrdepartment_id',input('hdrdepartment_id'));
}
$data = $model_obj->paginate(['page'=>input('current_page',1),'list_rows'=>input('list_rows',15)])
->each(function($item, $key){
$ret_field_name_arr = Tools::delete_str_empty_ele(',,,hdrdepartment_id--name,,,,,,,,,,');
//处理为外键字段+外键对应数据的字段名 egusers_id=>nickname
$ret_field_name2 = [];
foreach ($ret_field_name_arr as $ret_typ_field) {
$exp_arr = explode('--',$ret_typ_field);
//$exp_arr[0] 主表字段,$exp_arr[1] 副表字段
$ret_field_name2[$exp_arr[0]] = [$exp_arr[0],$exp_arr[1]];
}
//返回数据类型处理
$return_type_exp_arr = Tools::delete_str_empty_ele(',,,hdrdepartment_id==field_val,,,,,,,,,,');
//处理为类型+字段
$return_type_exp_arr2 = [];
foreach ($return_type_exp_arr as $ret_type_field) {
$exp_arr = explode('==',$ret_type_field);
$return_type_exp_arr2[$exp_arr[0]] = $exp_arr[1];
}
//返回数组 eg: [id-fa_goods_deal==goods_id,id-fa_goods_deal==goods_id]
$rel_table_arr = Tools::delete_str_empty_ele(',,,hdrdepartment_id-fa_hdrdepartment==id,,,,,,,,,,');
//关联的字段和表
$rel_field_table_arr2 = [];
//关系
foreach ($rel_table_arr as $rel_str) {
$exp_arr = explode('-',$rel_str);
$rel_field_table_arr2[$exp_arr[0]] = [explode('==',$exp_arr[1])[0],explode('==',$exp_arr[1])[1]];
}
foreach($item as $it_key=>$it_val){
if(empty($rel_field_table_arr2[$it_key])){
continue;
}
foreach($return_type_exp_arr as $key=>$val){
$val_arr = explode('==',$val);
if($it_key == $val_arr[0]){
switch($val_arr[1]){
case 'two_arr':
$item[$it_key.'_data'] = Db::table($rel_field_table_arr2[$it_key][0])->where("{$rel_field_table_arr2[$it_key][1]}",$it_val)->select();
break;
case 'one_arr':
$item[$it_key.'_data'] = Db::table($rel_field_table_arr2[$it_key][0])->where("{$rel_field_table_arr2[$it_key][1]}",$it_val)->find();
break;
case 'field_val':
$item[$it_key.'_data'] = Db::table($rel_field_table_arr2[$it_key][0])->where("{$rel_field_table_arr2[$it_key][1]}",$it_val)->value("{$ret_field_name2[$it_key][1]}");
break;
}
}
}
}
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,'操作异常',[]));
}
}
}

View File

@@ -0,0 +1,328 @@
<?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\tool\Tools;
use think\Controller;
class Hdrfollowup extends BaseHttpApi
{
protected $controller_comments = '统一随访记录';
/**
* 删除随访
* 参数:
* id ID
* api/Hdrfollowup/del
*/
function del(){
Tools::log_to_write_txt(['删除统一随访记录'=>input()]);
$api_desc = '删除统一随访记录';
try {
$id = input('id');
if(empty($id)){
return json(Tools::set_fail('参数错误。0'));
}
Db::table(TabConf::$fa_hdrfollowup)
->where('id',$id)
->delete();
return json(Tools::set_ok('ok'));
} catch (\Exception $e) {
Tools::log_to_write_txt([
'error'=>'删除统一随访记录.异常.'.$e->getMessage(),
'input'=>input(),
'error_info'=>$e->getTraceAsString()
]);
return json(Tools::set_fail());
}
}
/**
* desc获取统一随访记录
*
* api/Hdrfollowup/getHdrfollowupList
*
* 参数:
* 带分页
* current_page 当前页码
* list_rows 每页显示条数 默认15
* id ID
* report_dataid 报告ID
* hdruserbaseinfo_id 统一基本信息
* userbaseid 基本信息ID
* name 姓名
* phone 电话
* status 状态:0=待发送,1=已发送
* hdrfollowuptemplate_id 随访模板ID
* flow 诊断流程:0=初诊,1=复诊
* send_time 发送时间
* create_time 创建时间
*
* 所有字段说明<span style="color: gray">(可能有部分额外字段未在此体现)</span>
* id ID
* report_dataid 报告ID
* hdruserbaseinfo_id 统一基本信息
* userbaseid 基本信息ID
* name 姓名
* phone 电话
* content 随访内容
* status 状态:0=待发送,1=已发送
* hdrfollowuptemplate_id 随访模板ID
* flow 诊断流程:0=初诊,1=复诊
* send_time 发送时间
* create_time 创建时间
* authorwh
*/
function getHdrfollowupList(){
Tools::log_to_write_txt(['获取统一随访记录 入参:'=>input()]);
$api_desc = '获取统一随访记录';
try {
$id = input('id');
$report_dataid = input('report_dataid');
$hdruserbaseinfo_id = input('hdruserbaseinfo_id');
$userbaseid = input('userbaseid');
$name = input('name');
$phone = input('phone');
$status = input('status');
$hdrfollowuptemplate_id = input('hdrfollowuptemplate_id');
$flow = input('flow');
$send_time = input('send_time');
$create_time = input('create_time');
$model_obj = Db::table(TabConf::$fa_hdrfollowup);
if(input('id')){
$model_obj->where('id',input('id'));
}
if(input('report_dataid')){
$model_obj->where('report_dataid',input('report_dataid'));
}
if(input('hdruserbaseinfo_id')){
$model_obj->where('hdruserbaseinfo_id',input('hdruserbaseinfo_id'));
}
if(input('userbaseid')){
$model_obj->where('userbaseid',input('userbaseid'));
}
if(input('name')){
$model_obj->where('name',input('name'));
}
if(input('phone')){
$model_obj->where('phone',input('phone'));
}
if(input('status')){
$model_obj->where('status',input('status'));
}
if(input('hdrfollowuptemplate_id')){
$model_obj->where('hdrfollowuptemplate_id',input('hdrfollowuptemplate_id'));
}
if(input('flow')){
$model_obj->where('flow',input('flow'));
}
if(input('send_time')){
$model_obj->where('send_time',input('send_time'));
}
if(input('create_time')){
$model_obj->where('create_time',input('create_time'));
}
$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,'操作异常',[]));
}
}
/**
* 新增统一随访记录
*
* 参数:
* hdruserbaseinfo_id 统一基本信息 统一基本信息 必须
* name 姓名 姓名 必须
* phone 电话 电话 必须
* content 随访内容 随访内容 必须
* hdrfollowuptemplate_id 随访模板ID 随访模板ID 必须
* send_time 发送时间
* api/Hdrfollowup/addHdrfollowup
*/
function addHdrfollowup(){
Tools::log_to_write_txt(['新增统一随访记录'=>input()]);
$api_desc = '新增统一随访记录';
Db::startTrans();
try {
$hdruserbaseinfo_id = input('hdruserbaseinfo_id');
if(empty($hdruserbaseinfo_id)){
return json(Tools::set_fail('参数错误.0'));
}
$name = input('name');
if(empty($name)){
return json(Tools::set_fail('参数错误.1'));
}
$phone = input('phone');
if(empty($phone)){
return json(Tools::set_fail('参数错误.2'));
}
$content = input('content');
if(empty($content)){
return json(Tools::set_fail('参数错误.3'));
}
$hdrfollowuptemplate_id = input('hdrfollowuptemplate_id');
if(empty($hdrfollowuptemplate_id)){
return json(Tools::set_fail('参数错误.4'));
}
$send_time = input('send_time');
$data = [
'hdruserbaseinfo_id'=>$hdruserbaseinfo_id?:'',
'name'=>$name?:'',
'phone'=>$phone?:'',
'content'=>$content?:'',
'hdrfollowuptemplate_id'=>$hdrfollowuptemplate_id?:'',
'send_time'=>$send_time?:'',
];
$dataid = Db::table(TabConf::$fa_hdrfollowup)->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());
}
}
/**
* 修改统一随访记录
* 参数:
* id ID ID 必须
* hdruserbaseinfo_id 统一基本信息
* name 姓名
* phone 电话
* content 随访内容
* status 状态:0=待发送,1=已发送
* hdrfollowuptemplate_id 随访模板ID
* flow 诊断流程:0=初诊,1=复诊
* send_time 发送时间
* api/Hdrfollowup/updateHdrfollowup
*/
function updateHdrfollowup(){
Tools::log_to_write_txt(['修改统一随访记录'=>input()]);
$api_desc = '修改统一随访记录';
Db::startTrans();
try {
$hdruserbaseinfo_id = input('hdruserbaseinfo_id');
$name = input('name');
$phone = input('phone');
$content = input('content');
$status = input('status');
$hdrfollowuptemplate_id = input('hdrfollowuptemplate_id');
$flow = input('flow');
$send_time = input('send_time');
if(empty(input('id'))){
return json(Tools::set_fail('参数错误。0'));
}
$data = [
//'hdruserbaseinfo_id'=>$hdruserbaseinfo_id?:'',
//'name'=>$name?:'',
//'phone'=>$phone?:'',
//'content'=>$content?:'',
//'hdrfollowuptemplate_id'=>$hdrfollowuptemplate_id?:'',
////'flow'=>$flow?:'',
//'send_time'=>$send_time?:'',
];
if(isset($hdruserbaseinfo_id)){
$data['hdruserbaseinfo_id'] = $hdruserbaseinfo_id;
}
if(isset($name)){
$data['name'] = $name;
}
if(isset($phone)){
$data['phone'] = $phone;
}
if(isset($content)){
$data['content'] = $content;
}
if(isset($hdrfollowuptemplate_id)){
$data['hdrfollowuptemplate_id'] = $hdrfollowuptemplate_id;
}
if(isset($send_time)){
$data['send_time'] = $send_time;
}
if(isset($status)){
$data['status'] = $status;
}
//'status'=>$status?:'',
$dataid = Db::table(TabConf::$fa_hdrfollowup)
->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());
}
}
}

View File

@@ -0,0 +1,217 @@
<?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\tool\Tools;
use wanghua\general_utility_tools_php\Validate;
use think\Controller;
class Hdrfollowuptemplate extends BaseHttpApi
{
protected $controller_comments = '随访模板';
/**
* 新增随访模板
*
* 参数:
* name 模板名称 模板名称 必须
* content 模板内容 模板内容 必须
* api/Hdrfollowuptemplate/addHdrfollowuptemplate
*/
function addHdrfollowuptemplate(){
Tools::log_to_write_txt(['新增随访模板'=>input()]);
$api_desc = '新增随访模板';
Db::startTrans();
try {
$name = input('name');
if(empty($name)){
return json(Tools::set_fail('参数错误.0'));
}
$content = input('content');
if(empty($content)){
return json(Tools::set_fail('参数错误.1'));
}
$data = [
'name'=>$name?:'',
'content'=>$content?:'',
];
$dataid = Db::table(TabConf::$fa_hdrfollowuptemplate)->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());
}
}
/**
* 修改随访模板
* 参数:
* id ID ID 必须
* name 模板名称
* content 模板内容
* api/Hdrfollowuptemplate/updateHdrfollowuptemplate
*/
function updateHdrfollowuptemplate(){
Tools::log_to_write_txt(['修改随访模板'=>input()]);
$api_desc = '修改随访模板';
Db::startTrans();
try {
$name = input('name');
$content = input('content');
if(empty(input('id'))){
return json(Tools::set_fail('参数错误。0'));
}
$data = [
'name'=>$name?:'',
'content'=>$content?:'',
];
$dataid = Db::table(TabConf::$fa_hdrfollowuptemplate)
->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());
}
}
/**
* desc获取随访模板
*
* api/Hdrfollowuptemplate/getHdrfollowuptemplateList
*
* 参数:
* 带分页
* current_page 当前页码
* list_rows 每页显示条数 默认15
* id ID
* name 模板名称
* content 模板内容
*
* 所有字段说明<span style="color: gray">(可能有部分额外字段未在此体现)</span>
* id ID
* name 模板名称
* content 模板内容
* authorwh
*/
function getHdrfollowuptemplateList(){
Tools::log_to_write_txt(['获取随访模板 入参:'=>input()]);
$api_desc = '获取随访模板';
try {
$id = input('id');
$name = input('name');
$content = input('content');
$model_obj = Db::table(TabConf::$fa_hdrfollowuptemplate);
if(input('id')){
$model_obj->where('id',input('id'));
}
if(input('name')){
$model_obj->where('name',input('name'));
}
if(input('content')){
$model_obj->where('content',input('content'));
}
$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,'操作异常',[]));
}
}
/**
* 删除模板
*
* api/Hdrfollowuptemplate/del
* 参数:
* id ID ID 必须
*/
function del(){
Tools::log_to_write_txt(['删除随访模板 入参:'=>input()]);
$api_desc = '删除随访模板';
Db::startTrans();
try {
$id = input('id');
if(empty($id)){
return json(Tools::set_fail('参数错误.0'));
}
$data = Db::table(TabConf::$fa_hdrfollowuptemplate)
->where('id',$id)
->delete();
Db::commit();
return json(Tools::set_ok('ok',$data));
} catch (\Exception $e) {
Db::rollback();
Tools::log_to_write_txt([
'error'=>'删除随访模板.异常.'.$e->getMessage(),
'参数'=>input(),
'error_info'=>$e->getTraceAsString()
]);
return json(Tools::set_fail());
}
}
}

View File

@@ -0,0 +1,85 @@
<?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\tool\Tools;
use wanghua\general_utility_tools_php\Validate;
use think\Controller;
class Hdrhealthinsight extends BaseHttpApi
{
protected $controller_comments = '患者健康洞察';
/**
* desc获取患者健康洞察
*
* api/Hdrhealthinsight/getHdrhealthinsightList
*
* 参数:
* 带分页
* current_page 当前页码
* list_rows 每页显示条数 默认15
* id ID
* hdruserbaseinfo_id 统一基本信息 【必须】
*
* 所有字段说明<span style="color: gray">(可能有部分额外字段未在此体现)</span>
* id ID
* hdruserbaseinfo_id 统一基本信息
* content 洞察内容
* authorwh
*/
function getHdrhealthinsightList(){
Tools::log_to_write_txt(['获取患者健康洞察 入参:'=>input()]);
$api_desc = '获取患者健康洞察';
try {
$id = input('id');
$hdruserbaseinfo_id = input('hdruserbaseinfo_id');
if(empty($hdruserbaseinfo_id)){
return json(Tools::set_fail('参数错误.1',['error_msg'=>'错误信息hdruserbaseinfo_id错误']));
}
$model_obj = Db::table(TabConf::$fa_hdrhealth_insight);
if(input('id')){
$model_obj->where('id',input('id'));
}
if(input('hdruserbaseinfo_id')){
$model_obj->where('hdruserbaseinfo_id',input('hdruserbaseinfo_id'));
}
$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,'操作异常',[]));
}
}
}

View File

@@ -0,0 +1,220 @@
<?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\tool\Tools;
use wanghua\general_utility_tools_php\Validate;
use think\Controller;
class Hdrquestionnaireanswer extends BaseHttpApi
{
protected $controller_comments = '科室问卷答案';
/**
* desc获取科室问卷答案
*
* api/Hdrquestionnaireanswer/getHdrquestionnaireanswerList
*
* 参数:
* 带分页
* current_page 当前页码
* list_rows 每页显示条数 默认15
* id ID
* hdrquestionnairequestion_id 问卷问题ID
* answer 问卷答案
*
* 所有字段说明<span style="color: gray">(可能有部分额外字段未在此体现)</span>
* id ID
* hdrquestionnairequestion_id 问卷问题ID
* answer 问卷答案
* create_time 创建时间
* update_time 更新时间
* authorwh
*/
function getHdrquestionnaireanswerList(){
Tools::log_to_write_txt(['获取科室问卷答案 入参:'=>input()]);
$api_desc = '获取科室问卷答案';
try {
$id = input('id');
$hdrquestionnairequestion_id = input('hdrquestionnairequestion_id');
$answer = input('answer');
$model_obj = Db::table(TabConf::$fa_hdrquestionnaireanswer);
if(input('id')){
$model_obj->where('id',input('id'));
}
if(input('hdrquestionnairequestion_id')){
$model_obj->where('hdrquestionnairequestion_id',input('hdrquestionnairequestion_id'));
}
if(input('answer')){
$model_obj->where('answer',input('answer'));
}
$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,'操作异常',[]));
}
}
/**
* 新增一个问卷答案
*
* 参数:
* hdrquestionnairequestion_id 问卷问题ID 问卷问题ID 必须
* answer 问卷答案 问卷答案 必须
* api/Hdrquestionnaireanswer/addHdrquestionnaireanswer
*/
function addHdrquestionnaireanswer(){
Tools::log_to_write_txt(['新增一个问卷答案'=>input()]);
$api_desc = '新增一个问卷答案';
Db::startTrans();
try {
$hdrquestionnairequestion_id = input('hdrquestionnairequestion_id');
if(empty($hdrquestionnairequestion_id)){
return json(Tools::set_fail('参数错误.0'));
}
$answer = input('answer');
if(empty($answer)){
return json(Tools::set_fail('参数错误.1'));
}
$data = [
'hdrquestionnairequestion_id'=>$hdrquestionnairequestion_id?:'',
'answer'=>$answer?:'',
];
$dataid = Db::table(TabConf::$fa_hdrquestionnaireanswer)->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());
}
}
/**
* 修改科室问卷答案
* 参数:
* id ID ID 必须
* hdrquestionnairequestion_id 问卷问题ID
* answer 问卷答案
* api/Hdrquestionnaireanswer/updateHdrquestionnaireanswer
*/
function updateHdrquestionnaireanswer(){
Tools::log_to_write_txt(['修改科室问卷答案'=>input()]);
$api_desc = '修改科室问卷答案';
Db::startTrans();
try {
$hdrquestionnairequestion_id = input('hdrquestionnairequestion_id');
$answer = input('answer');
if(empty(input('id'))){
return json(Tools::set_fail('参数错误。0'));
}
$data = [
'hdrquestionnairequestion_id'=>$hdrquestionnairequestion_id?:'',
'answer'=>$answer?:'',
];
$dataid = Db::table(TabConf::$fa_hdrquestionnaireanswer)
->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());
}
}
/**
* desc 删除科室问卷答案
* authorwh
*
* 参数:
* id 数据id 必须
* api/Hdrquestionnaireanswer/del
*/
function del(){
Tools::log_to_write_txt(['删除科室问卷答案'=>input()]);
$api_desc = '删除科室问卷答案';
try {
$id = input('id');
if(empty($id)){
return json(Tools::set_fail('参数错误。0'));
}
Db::table(TabConf::$fa_hdrquestionnairequestion)
->where('id',$id)
->delete();
return json(Tools::set_ok('ok'));
} catch (\Exception $e) {
Tools::log_to_write_txt([
'error'=>'删除科室问卷答案.异常.'.$e->getMessage(),
'input'=>input(),
'error_info'=>$e->getTraceAsString()
]);
return json(Tools::set_fail());
}
}
}

View File

@@ -0,0 +1,452 @@
<?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\Mmodel;
use wanghua\general_utility_tools_php\tool\Tools;
use wanghua\general_utility_tools_php\Validate;
use think\Controller;
class Hdrquestionnairequestion extends BaseHttpApi
{
protected $controller_comments = '科室问卷问题(一个问题对应多个答案)';
/**
* 新增科室问卷问题(一个问题对应多个答案)
*
* 参数:
* hdrdepartment_id 所属科室 所属科室 必须
* question 问卷问题 问卷问题 必须
* is_common 是否通用:yes=是,no=否 是否通用:yes=是,no=否 必须
* is_only_boy 只适合男:yes=是,no=否 只适合男:yes=是,no=否 必须
* is_only_girl 只适合女:yes=是,no=否 只适合女:yes=是,no=否 必须
* type 选项类型:one=单选,more=多选 选项类型:one=单选,more=多选 必须
* api/Hdrquestionnairequestion/addHdrquestionnairequestion
*/
function addHdrquestionnairequestion()
{
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('参数错误.0'));
}
$question = input('question');
if (empty($question)) {
return json(Tools::set_fail('参数错误.1'));
}
$is_common = input('is_common');
if (empty($is_common)) {
return json(Tools::set_fail('参数错误.2'));
}
$is_only_boy = input('is_only_boy');
if (empty($is_only_boy)) {
return json(Tools::set_fail('参数错误.3'));
}
$is_only_girl = input('is_only_girl');
if (empty($is_only_girl)) {
return json(Tools::set_fail('参数错误.4'));
}
$type = input('type');
if (empty($type)) {
return json(Tools::set_fail('参数错误.5'));
}
$data = [
'hdrdepartment_id' => $hdrdepartment_id ?: '',
'question' => $question ?: '',
'is_common' => $is_common ?: '',
'is_only_boy' => $is_only_boy ?: '',
'is_only_girl' => $is_only_girl ?: '',
'type' => $type ?: '',
];
$dataid = Db::table(TabConf::$fa_hdrquestionnairequestion)->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());
}
}
/**
* 修改科室问卷问题(一个问题对应多个答案)
* 参数:
* id ID ID 必须
* hdrdepartment_id 所属科室
* question 问卷问题
* is_common 是否通用:yes=是,no=否
* is_only_boy 只适合男:yes=是,no=否
* is_only_girl 只适合女:yes=是,no=否
* type 选项类型:one=单选,more=多选
* api/Hdrquestionnairequestion/updateHdrquestionnairequestion
*/
function updateHdrquestionnairequestion()
{
Tools::log_to_write_txt(['修改科室问卷问题(一个问题对应多个答案)' => input()]);
$api_desc = '修改科室问卷问题(一个问题对应多个答案)';
Db::startTrans();
try {
$hdrdepartment_id = input('hdrdepartment_id');
$question = input('question');
$is_common = input('is_common');
$is_only_boy = input('is_only_boy');
$is_only_girl = input('is_only_girl');
$type = input('type');
if (empty(input('id'))) {
return json(Tools::set_fail('参数错误。0'));
}
$data = [
'hdrdepartment_id' => $hdrdepartment_id ?: '',
'question' => $question ?: '',
'is_common' => $is_common ?: '',
'is_only_boy' => $is_only_boy ?: '',
'is_only_girl' => $is_only_girl ?: '',
'type' => $type ?: '',
];
$dataid = Db::table(TabConf::$fa_hdrquestionnairequestion)
->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());
}
}
/**
* desc 删除科室问卷问题(一个问题对应多个答案)
* authorwh
*
* 参数:
* id 数据id 必须
*
* api/Hdrquestionnairequestion/del
*/
function del()
{
Tools::log_to_write_txt(['删除科室问卷问题(一个问题对应多个答案)' => input()]);
$api_desc = '删除科室问卷问题(一个问题对应多个答案)';
try {
$id = input('id');
if (empty($id)) {
return json(Tools::set_fail('参数错误。0'));
}
Db::table(TabConf::$fa_hdrquestionnairequestion)
->where('id', $id)
->delete();
return json(Tools::set_ok('ok'));
} catch (\Exception $e) {
Tools::log_to_write_txt([
'error' => '删除科室问卷问题(一个问题对应多个答案).异常.' . $e->getMessage(),
'input' => input(),
'error_info' => $e->getTraceAsString()
]);
return json(Tools::set_fail());
}
}
/**
* desc获取科室问卷问题(一个问题对应多个答案)
*
* api/Hdrquestionnairequestion/getHdrquestionnairequestionList
*
* 参数:
* 带分页
* current_page 当前页码
* list_rows 每页显示条数 默认15
* id ID
* hdrdepartment_id 所属科室 【必须】
* group 题目分组
* question 问卷问题
* is_common 是否通用:yes=是,no=否
* is_only_boy 只适合男:yes=是,no=否
* is_only_girl 只适合女:yes=是,no=否
* type 选项类型:one=单选,more=多选
*
* 所有字段说明<span style="color: gray">(可能有部分额外字段未在此体现)</span>
* id ID
* hdrdepartment_id 所属科室
* question 问卷问题
* is_common 是否通用:yes=是,no=否
* is_only_boy 只适合男:yes=是,no=否
* is_only_girl 只适合女:yes=是,no=否
* type 选项类型:one=单选,more=多选
* create_time 创建时间
* update_time 更新时间
* authorwh
*/
function getHdrquestionnairequestionList(){
Tools::log_to_write_txt(['获取科室问卷问题(一个问题对应多个答案) 入参:'=>input()]);
$api_desc = '获取科室问卷问题(一个问题对应多个答案)';
try {
$id = input('id');
$hdrdepartment_id = input('hdrdepartment_id');
if(empty($hdrdepartment_id)){
return json(Tools::set_fail('参数错误.1',['error_msg'=>'错误信息hdrdepartment_id错误']));
}
$question = input('question');
$is_common = input('is_common');
$is_only_boy = input('is_only_boy');
$is_only_girl = input('is_only_girl');
$type = input('type');
//$uniqueid = input('uniqueid');
//if(empty($uniqueid)){
// return json(Tools::set_fail('参数错误.2',['error_msg'=>'错误信息uniqueid当次请求唯一标识不能为空,答题前获取api调用地址api/Common/getUniqueId']));
//}
$group = input('group');
$model_obj = Db::table(TabConf::$fa_hdrquestionnairequestion);
if(isset($group) && $group!=''){
$model_obj->whereLike('group',"%{$group}%");
}else{
$model_obj->where('group',$group);
}
if(input('id')){
$model_obj->where('id',input('id'));
}
if(input('hdrdepartment_id')){
$model_obj->where('hdrdepartment_id',input('hdrdepartment_id'));
}
if(input('question')){
$model_obj->where('question',input('question'));
}
if(input('is_common')){
$model_obj->where('is_common',input('is_common'));
}
if(input('is_only_boy')){
$model_obj->where('is_only_boy',input('is_only_boy'));
}
if(input('is_only_girl')){
$model_obj->where('is_only_girl',input('is_only_girl'));
}
if(input('type')){
$model_obj->where('type',input('type'));
}
//过滤已答过的题目
$data = $model_obj->paginate(['page'=>input('current_page',1),'list_rows'=>input('list_rows',15)])
->each(function($item, $key){
$ret_field_name_arr = Tools::delete_str_empty_ele('id--testname,hdrdepartment_id--name,,,,,,,');
//处理为外键字段+外键对应数据的字段名 egusers_id=>nickname
$ret_field_name2 = [];
foreach ($ret_field_name_arr as $ret_typ_field) {
$exp_arr = explode('--',$ret_typ_field);
//$exp_arr[0] 主表字段,$exp_arr[1] 副表字段
$ret_field_name2[$exp_arr[0]] = [$exp_arr[0],$exp_arr[1]];
}
//返回数据类型处理
$return_type_exp_arr = Tools::delete_str_empty_ele('id==two_arr,hdrdepartment_id==field_val,,,,,,,');
//处理为类型+字段
$return_type_exp_arr2 = [];
foreach ($return_type_exp_arr as $ret_type_field) {
$exp_arr = explode('==',$ret_type_field);
$return_type_exp_arr2[$exp_arr[0]] = $exp_arr[1];
}
//返回数组 eg: [id-fa_goods_deal==goods_id,id-fa_goods_deal==goods_id]
$rel_table_arr = Tools::delete_str_empty_ele('id-fa_hdrquestionnaireanswer==hdrquestionnairequestion_id,hdrdepartment_id-fa_hdrdepartment==id,,,,,,,');
//关联的字段和表
$rel_field_table_arr2 = [];
//关系
foreach ($rel_table_arr as $rel_str) {
$exp_arr = explode('-',$rel_str);
$rel_field_table_arr2[$exp_arr[0]] = [explode('==',$exp_arr[1])[0],explode('==',$exp_arr[1])[1]];
}
foreach($item as $it_key=>$it_val){
if(empty($rel_field_table_arr2[$it_key])){
continue;
}
foreach($return_type_exp_arr as $key=>$val){
$val_arr = explode('==',$val);
if($it_key == $val_arr[0]){
switch($val_arr[1]){
case 'two_arr':
$item[$it_key.'_data'] = Db::table($rel_field_table_arr2[$it_key][0])->where("{$rel_field_table_arr2[$it_key][1]}",$it_val)->select();
break;
case 'one_arr':
$item[$it_key.'_data'] = Db::table($rel_field_table_arr2[$it_key][0])->where("{$rel_field_table_arr2[$it_key][1]}",$it_val)->find();
break;
case 'field_val':
$item[$it_key.'_data'] = Db::table($rel_field_table_arr2[$it_key][0])->where("{$rel_field_table_arr2[$it_key][1]}",$it_val)->value("{$ret_field_name2[$it_key][1]}");
break;
}
}
}
}
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/Hdrquestionnairequestion/getHdrQuestionTotal
*
* 参数与查询裂变接口保持一致
*
* 返回总数
*
* authorwh
*/
function getHdrQuestionTotal(){
Tools::log_to_write_txt(['获取科室问卷问题(一个问题对应多个答案) 入参:'=>input()]);
$api_desc = '获取科室问卷问题(一个问题对应多个答案)';
try {
$id = input('id');
$hdrdepartment_id = input('hdrdepartment_id');
if(empty($hdrdepartment_id)){
return json(Tools::set_fail('参数错误.1',['error_msg'=>'错误信息hdrdepartment_id错误']));
}
$question = input('question');
$is_common = input('is_common');
$is_only_boy = input('is_only_boy');
$is_only_girl = input('is_only_girl');
$type = input('type');
//$uniqueid = input('uniqueid');
//if(empty($uniqueid)){
// return json(Tools::set_fail('参数错误.2',['error_msg'=>'错误信息uniqueid当次请求唯一标识不能为空,答题前获取api调用地址api/Common/getUniqueId']));
//}
$group = input('group');
$model_obj = Db::table(TabConf::$fa_hdrquestionnairequestion);
if(isset($group) && $group!=''){
$model_obj->whereLike('group',"%{$group}%");
}else{
$model_obj->where('group',$group);
}
if(input('id')){
$model_obj->where('id',input('id'));
}
if(input('hdrdepartment_id')){
$model_obj->where('hdrdepartment_id',input('hdrdepartment_id'));
}
if(input('question')){
$model_obj->where('question',input('question'));
}
if(input('is_common')){
$model_obj->where('is_common',input('is_common'));
}
if(input('is_only_boy')){
$model_obj->where('is_only_boy',input('is_only_boy'));
}
if(input('is_only_girl')){
$model_obj->where('is_only_girl',input('is_only_girl'));
}
if(input('type')){
$model_obj->where('type',input('type'));
}
$data = $model_obj->count();
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根据id查询问题
*
* api/Hdrquestionnairequestion/findQuestionById
*
* 参数id 问题id
*
* authorwh
*/
function findQuestionById(){
return Mmodel::catchJson(function (){
$res = Db::table(TabConf::$fa_hdrquestionnairequestion)->where('id',input('id'))->find();
return Tools::set_ok('ok',$res);
});
}
}

View File

@@ -0,0 +1,194 @@
<?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\tool\Tools;
use think\Controller;
class Hdrregister extends BaseHttpApi
{
protected $controller_comments = '患者挂号列表(可重复挂号)';
/**
* 新增患者挂号列表(可重复挂号)
*
* 参数:
* date 挂号日期
* name 患者姓名(可重复挂号)
* doctor_name 医生名称
* age 病人年龄
* gender 病人性别
* phone 手机号
* qa_type 问答类型(患者定):1=自由问答,2=固定问答,3=健康问答
* ticket 对话凭据(便于查询)
* api/Hdrregister/addHdrregister
*/
function addHdrregister(){
Tools::log_to_write_txt(['新增患者挂号列表(可重复挂号)'=>input()]);
$api_desc = '新增患者挂号列表(可重复挂号)';
Db::startTrans();
try {
$date = input('date');
if(empty($date)){
return json(Tools::set_fail('参数错误.0'));
}
$name = input('name');
if(empty($name)){
return json(Tools::set_fail('参数错误.1'));
}
$doctor_name = input('doctor_name');
if(empty($doctor_name)){
return json(Tools::set_fail('参数错误.2'));
}
$age = input('age');
if(empty($age)){
return json(Tools::set_fail('参数错误.3'));
}
$gender = input('gender');
if(empty($gender)){
return json(Tools::set_fail('参数错误.4'));
}
$phone = input('phone');
if(empty($phone)){
return json(Tools::set_fail('参数错误.5'));
}
$qa_type = input('qa_type');
$ticket = input('ticket');
if(empty($ticket)){
return json(Tools::set_fail('参数错误.7'));
}
$data = [
'date'=>$date?:'',
'name'=>$name?:'',
'doctor_name'=>$doctor_name?:'',
'age'=>$age?:'',
'gender'=>$gender?:'',
'phone'=>$phone?:'',
'qa_type'=>$qa_type?:'',
'ticket'=>$ticket?:'',
];
$dataid = Db::table(TabConf::$fa_hdrregister)->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获取患者挂号列表(可重复挂号)
*
* api/Hdrregister/getHdrregisterList
*
* 参数:
* name 患者姓名(可重复挂号)
* phone 手机号
* id ID
* date 挂号日期
* name 患者姓名(可重复挂号)
* gender 病人性别
* phone 手机号
* status 状态:0=挂号中,1=结束诊断
* qa_type 问答类型(患者定):1=自由问答,2=固定问答,3=健康问答
*
* 所有字段说明<span style="color: gray">(可能有部分额外字段未在此体现)</span>
* id ID
* date 挂号日期
* name 患者姓名(可重复挂号)
* doctor_name 医生名称
* age 病人年龄
* gender 病人性别
* phone 手机号
* create_time 创建时间
* status 状态:0=挂号中,1=结束诊断
* qa_type 问答类型(患者定):1=自由问答,2=固定问答,3=健康问答
* ticket 对话凭据(便于查询)
* authorwh
*/
function getHdrregisterList(){
Tools::log_to_write_txt(['获取患者挂号列表(可重复挂号) 入参:'=>input()]);
$api_desc = '获取患者挂号列表(可重复挂号)';
try {
$id = input('id');
$date = input('date');
$name = input('name');
$gender = input('gender');
$phone = input('phone');
$status = input('status');
$qa_type = input('qa_type');
$model_obj = Db::table(TabConf::$fa_hdrregister);
if(input('name')){
$model_obj->whereLike('name','%'.input('name').'%');
}
if(input('phone')){
$model_obj->whereLike('phone','%'.input('phone').'%');
}
if(input('id')){
$model_obj->where('id',input('id'));
}
if(input('date')){
$model_obj->where('date',input('date'));
}
if(input('name')){
$model_obj->where('name',input('name'));
}
if(input('gender')){
$model_obj->where('gender',input('gender'));
}
if(input('status')){
$model_obj->where('status',input('status'));
}
if(input('qa_type')){
$model_obj->where('qa_type',input('qa_type'));
}
$data = $model_obj->select();
if(empty($data)){
return json(Tools::set_ok('ok',$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,'操作异常',[]));
}
}
}

View File

@@ -0,0 +1,727 @@
<?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 Hdruserbaseinfo
* @package app\api\controller
*/
class Hdruserbaseinfo extends BaseHttpApi
{
protected $controller_comments = '统一问诊用户基本信息';
/**
* desc获取统一问诊用户基本信息列表后台病历管理列表
*
* api/Hdruserbaseinfo/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_tt_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/Hdruserbaseinfo/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_tt_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/Hdruserbaseinfo/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_tt_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_tt_userbaseinfo)
->insertGetId($base_info_data);
//$this->operateLog('保存用户基本信息,没有就新增',api_user_info('id'));
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/Hdruserbaseinfo/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错误']);
}
$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;
//保存图片信息,存在则更新
$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']]);
});
}
}

View File

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

View File

@@ -0,0 +1,40 @@
<?php
/*
* description
* authorwh
* email
* createTime{2024/7/12} {17:01}
*/
namespace app\api\controller;
use app\api\logic\TychatLogic;
use wanghua\general_utility_tools_php\Mmodel;
/**
* @deprecated
* 健康洞察
*
* Class HealthInsights
* @package app\api\controller
*/
class HealthInsights
{
/**
* desc健康洞察
* 实时输出
*
* /api/HealthInsights/getHealthInsight
*
* authorwh
*/
function getHealthInsight(){
//return Mmodel::catch(function (){
// $obj = new TychatLogic();
// return $obj->getHealthInsight();
//});
}
}

View File

@@ -0,0 +1,413 @@
<?php
/*
* description
* authorwh
* email
* createTime{2024/7/12} {11:29}
*/
namespace app\api\controller;
use app\common\model\TabConf;
use think\Db;
use wanghua\general_utility_tools_php\gpt\chat\ChatGPT;
use wanghua\general_utility_tools_php\Mmodel;
use wanghua\general_utility_tools_php\tool\Tools;
/**
* h5-数字人-报告
* Class Reporth5
* @package app\api\controller
*/
class Reporth5 extends BaseHttpApi
{
public function __construct()
{
//if(!Usersh5::checkLogin()){
// echo json_encode(['code'=>591,'msg'=>'未登录']);exit;
//}
}
/**
* desch5-数字人-生成听诊报告(同时提交固定问答聊天记录)
*
* api/Reporth5/createReport
*
* name 病人姓名
gender 病人性别
age 病人年龄
edu 教育程度
career_year 职业及年限
power 体力要求
satisfaction 经济满意度
old_career_year 过往职业及年限
support 社会支持度
marriage 婚姻状况
live 居住情况
home 家庭关系
address 地址
phone 联系方式
wechat_no 微信号
ticket 登录票据
hdrdepartment_id 科室
* from 来源:num_per=数智人,ty=听译助手,h5=h5网页问诊
*
* content 对话内容;格式:
* $content = [
["role" => "user", "content" => '医生说xxxxx'],
["role" => "user", "content" => '患者说xxxxx'],
];
* authorwh
*/
function createReport(){
//header('Content-Type: text/event-stream');
//header('Cache-Control: no-cache');
//header('Connection: keep-alive');
//header('X-Accel-Buffering: no');
$uniqueid = input('uniqueid');
if(empty($uniqueid)){
return json(Tools::set_fail('uniqueid必须'));
}
Tools::log_to_write_txt(['input'=>input()]);
$config = config('ai_num_report_config');
$question = '';//input('question','');
$chatobj = new ChatGPT();
$chatobj->url = $config['base_url'];
$chatobj->model = '';
$chatobj->apiKey = $config['APIKey'];
$answer_json_arr = [];
$ticket = input('ticket');
if(empty($ticket)){
return json(Tools::set_fail('对话票据ticket必须(用于隔离用户聊天历史记录),登陆时返回票据,每次诊断结束重新生成票据!'));
}
if(empty(input('from'))){
return json(Tools::set_fail('from必须'));
}
$from = 'h5';
$qa_type = 'fix';
if(empty($qa_type)){
return json(Tools::set_fail('qa_type问答模式必须可选项问答模式:free=自由问答,fix=固定问答'));
}
//用户
$user = Db::table(TabConf::$fa_hdrusersh5)->where('ticket',$ticket)->find();
if(empty($user)){
return json(Tools::set_res(531,'用户不存在'));
}
//查询医生所属部门
$hdrdoctorusers = Db::table(TabConf::$fa_hdrdoctorusers)
->where('username',$user['doctor'])
->find();
if(empty($hdrdoctorusers)){
return json(Tools::set_fail('医生不存在'));
}
//部门id
$hdrdepartment_id = $hdrdoctorusers['hdrdepartment_id'];
$config = [
'stream'=>false,
'chatId'=>Tools::getMillisecond(),
];
//验证参数
if(empty(input('name'))){
return json(Tools::set_fail('name必须'));
}
if(empty(input('gender'))){
return json(Tools::set_fail('gender必须'));
}
if(empty(input('age'))){
return json(Tools::set_fail('age必须'));
}
if(empty(input('phone'))){
return json(Tools::set_fail('phone必须'));
}
if(empty(input('hdrdepartment_id'))){
return json(Tools::set_fail('hdrdepartment_id必须'));
}
$basedata = [
'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',''),//微信号
'from'=>$from,//来源
'ticket'=>$ticket,//登录票据'
'date'=>date('Y-m-d'),
'hdrdepartment_id'=>$hdrdepartment_id,//科室
];
//$uniqueid = md5(json_encode($basedata));
//查询报告
$report = Db::table('fa_tt_medical_report')
->where('uniqueid',$uniqueid)
->find();
if($report){
return json(Tools::set_fail('报告重复'));
}
$contentstr = input('content');
if(empty($contentstr)){
return json(Tools::set_fail('content必须'));
}
$content['name'] = '【姓名】:'.$basedata['name'];
$content['gender'] = '【性别】:'.$basedata['gender'];
$content['age'] = '【年龄】:'.$basedata['age'];
$content['edu'] = '【教育程度】:'.$basedata['edu'];
$content['career_year'] = '【职业及年限】:'.$basedata['career_year'];
$content['power'] = '【体力要求】:'.$basedata['power'];
$content['satisfaction'] = '【经济满意度】:'.$basedata['satisfaction'];
$content['old_career_year'] = '【过往职业及年限】:'.$basedata['old_career_year'];
$content['old_career_power'] = '【过往体力要求】:'.$basedata['old_career_power'];
$content['support'] = '【社会支持度】:'.$basedata['support'];
$content['marriage'] = '【婚姻状况】:'.$basedata['marriage'];
$content['live'] = '【居住情况】:'.$basedata['live'];
$content['home'] = '【家庭关系】:'.$basedata['home'];
$content['address'] = '【地址】:'.$basedata['address'];
$content['phone'] = '【联系方式】:'.$basedata['phone'];
$content['wechat_no'] = '【微信号】:'.$basedata['wechat_no'];
//
////设置基本信息
//$chatobj->setBefore($content);
$sub_content = json_decode($contentstr,true);
if(empty($sub_content)){
return json(Tools::set_fail('没有对话诊断信息'));
}
Tools::log_to_write_txt(['聊天记录content'=>$sub_content]);
//$content = [
// //["role" => "user", "content" => '']
//];
//$sub_content = array_merge($content,$sub_content);
$ctn_msg_str = implode('',array_column($sub_content,'content'));
foreach ($content as $val){
$ctn_msg_str .= ','.$val;
}
$sub_content_msg = [
["role" => "user", "content" => $ctn_msg_str]
];
//chatGpt设置前置聊天上下文
$chatobj->setBefore($sub_content_msg);
//回答
$chatobj->returnAnswer($question,$config,$answer_json_arr);
//dump($answer_json_arr);die;
$res_content = [];
$data = [];
Tools::log_to_write_txt(['gpt回复'=>$answer_json_arr]);
//把返回的报告保存起来
foreach ($answer_json_arr as $josn){
$item = json_decode($josn,true);
if(empty($item['choices'])){
return json(Tools::set_fail('choices is empty',$answer_json_arr));
}
$choices = $item['choices'];
foreach ($choices as $choice){
$data[] = [
'username'=>$hdrdoctorusers['username'],//登录的医生
'report_content'=>$choice['message']['content'],
'name'=>$basedata['name'],
'phone'=>$basedata['phone'],
];
$res_content[] = $choice['message']['content'];
}
}
if(empty($data)){
return json(Tools::set_fail('没有获取到报告'));
}
Db::startTrans();
try {
foreach ($data as $item){
//新增统一基本信息
$hdruserbaseinfo_id = Db::table('fa_tt_userbaseinfo')->insertGetId($basedata);
//只新增不修改
$userbaseinfo_id = Db::table('fa_tt_userbaseinfo')->insert($basedata);
//保存疼痛科聊天记录
$this->setTtChatHistory($sub_content,$hdrdoctorusers['username'],$hdruserbaseinfo_id,$userbaseinfo_id,$ticket);
$item['userbaseid'] = $userbaseinfo_id;
$item['hdruserbaseinfo_id'] = $hdruserbaseinfo_id;//统一病历基本信息ID
$item['hdrdepartment_id'] = $hdrdepartment_id;
$item['from'] = $from;//来源:num_per=数智人,ty=听译助手,h5=h5网页问诊
$item['doctor'] = $hdrdoctorusers['name'];
$item['qa_type'] = $qa_type;
$item['uniqueid'] = $uniqueid;
//保存报告
Db::table('fa_tt_medical_report')->insert($item);
//日期
//$item['date'] = date('Y-m-d');
////统一存档(暂时不用)
//Db::table(TabConf::$fa_hdrmedical_report)->insert($item);
}
Db::commit();
return json(Tools::set_ok(['base_data'=>$content,'res_content'=>$res_content]));
}catch (\Exception $e){
Db::rollback();
Tools::error_txt_log($e);
return json(Tools::set_fail('新增报告失败.'.$e->getMessage()));
}
}
/**
* desc保存疼痛科聊天记录
* authorwh
* @param $sub_content
*/
private function setTtChatHistory($sub_content,$username,$hdruserbaseinfo_id,$userbaseinfo_id,$ticket){
//$content = [
// //["role" => "user", "content" => '']
//];
$data = [];
foreach ($sub_content as $item){
//$content = explode('',$item['content']);
$d = [
'username'=>$username,
//'type'=>empty($content[0])?'':$content[0],
'chat_msg'=>$item['content'],
'ticket'=>$ticket,
'userbaseinfo_id'=>$userbaseinfo_id,
'hdruserbaseinfo_id'=>$hdruserbaseinfo_id,
'type'=>$item['type'],
];
$data[] = $d;
}
Db::table(TabConf::$fa_tt_chathistory)->insertAll($data);
}
/**
* desc查询报告详情
*
* api/Reporth5/getReportById
* 参数dataid 报告id
* ticket用户ticket
* authorwh
*/
function getReportById(){
return Mmodel::catchJson(function (){
$info = Db::table('fa_tt_medical_report')
->where('id',input('dataid'))
->find();
return Tools::set_ok($info);
});
}
/**
* desc查询报告列表
*
* api/Reporth5/getReportList
* 参数username
* ticket用户ticket
*
* authorwh
*/
function getReportList(){
return Mmodel::catchJson(function (){
$info = Db::table('fa_tt_medical_report')
->select();
return Tools::set_ok($info);
});
}
/**
* 修改报告
* api/Reporth5/editReport
* 参数dataid 报告数据id
name 病人姓名
gender 病人性别: M=男性, F=女性
age 病人年龄
main_complaint 主诉
medical_history 病史
past_history 既往史
allergy_history 过敏史
family_history 家族史
personal_history 个人史
menstrual_marital_history 月经婚育史
diagnosis 诊断
treatment 医嘱
*/
function editReport(){
return Mmodel::catchJson(function (){
//$ticket = input('ticket');
//if(empty($ticket)){
// return Tools::set_fail('ticket必须');
//}
//修改基本信息
$data = [
//'username'=>$hdrdoctorusers['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',''),//医嘱
];
//修改基本信息
Mmodel::existsUpdateInsert('fa_tt_userbaseinfo',[
//'username'=>input('username',''),
'name'=>input('name',''),
],$data);
//修改报告
$str = <<<EOF
【姓名】:{$data['name']}
【年龄】:{$data['age']}
【性别】:{$data['gender']}
【主诉】:{$data['main_complaint']}
【病史】:{$data['medical_history']}
【既往史】:{$data['past_history']}
【过敏史】:{$data['allergy_history']}
【家族史】:{$data['family_history']}
【个人史】:{$data['personal_history']}
【月经婚育史】:{$data['menstrual_marital_history']}
【诊断】:{$data['diagnosis']}
【医嘱】:{$data['treatment']}
EOF;
$dataid = input('dataid');
if(empty($dataid)){
return Tools::set_fail('dataid必须');
}
Db::table('fa_tt_medical_report')
->where('id',$dataid)
->data(['report_content'=>$str])
->update();
return Tools::set_ok();
});
}
}

View File

@@ -0,0 +1,462 @@
<?php
/*
* description
* authorwh
* email
* createTime{2024/7/12} {11:29}
*/
namespace app\api\controller;
use app\common\model\TabConf;
use think\Db;
use wanghua\general_utility_tools_php\gpt\chat\ChatGPT;
use wanghua\general_utility_tools_php\Mmodel;
use wanghua\general_utility_tools_php\tool\Tools;
use wanghua\general_utility_tools_php\Validate;
/**
* 疼痛科-数字人-报告
* Class Reporttt
* @package app\api\controller
*/
class Reporttt extends BaseHttpApi
{
/**
* desc疼痛科-数字人-生成听诊报告(同时提交固定问答聊天记录)
*
* api/Reporttt/createReport
* username 用户名
*
* name 病人姓名
gender 病人性别
age 病人年龄
edu 教育程度
career_year 职业及年限
power 体力要求
satisfaction 经济满意度
old_career_year 过往职业及年限
support 社会支持度
marriage 婚姻状况
live 居住情况
home 家庭关系
address 地址
phone 联系方式
wechat_no 微信号
ticket 对话票据
hdrdepartment_id 科室
* from 来源:num_per=数智人,ty=听译助手,h5=h5网页问诊
* hdrdepartment 科室名称
*
* content 对话内容;格式:
* $content = [
["role" => "user", "content" => '医生说xxxxx'],
["role" => "user", "content" => '患者说xxxxx'],
];
* authorwh
*/
function createReport(){
//header('Content-Type: text/event-stream');
//header('Cache-Control: no-cache');
//header('Connection: keep-alive');
//header('X-Accel-Buffering: no');
Tools::log_to_write_txt(['input'=>input()]);
$report_config = config('ai_num_report_config');
$h5_login_user_phone = input('h5_login_user_phone');//h5端上传附件登录号码
//if (empty($h5_login_user_phone)){
// return json(Tools::set_fail('h5_login_user_phone必须','使用h5端上传附件那个号码'));
//}
$question = '';//input('question','');
$chatobj = new ChatGPT();
$chatobj->url = $report_config['base_url'];
$chatobj->model = '';
$chatobj->apiKey = $report_config['APIKey'];
$answer_json_arr = [];
$ticket = input('ticket');
if(empty($ticket)){
return json(Tools::set_fail('对话票据ticket必须(用于隔离用户聊天历史记录),登陆时返回票据,每次诊断结束重新生成票据!'));
}
if(empty(input('from'))){
return json(Tools::set_fail('from必须'));
}
$from = input('from');
$qa_type = input('qa_type');
if($from=='h5'){
$qa_type = 'fix';
}
if(empty($qa_type)){
return json(Tools::set_fail('qa_type问答模式必须可选项问答模式:free=自由问答,fix=固定问答'));
}
$user = Db::table('fa_hdrdoctorusers')->where('ticket',$ticket)->find();
if(empty($user)){
return json(Tools::set_res(531,'医生不存在,请登录'));
}
$hdrdepartment_id = input('hdrdepartment_id');
$config = [
'stream'=>false,
'chatId'=>Tools::getMillisecond(),
];
//验证参数
if(empty(input('name'))){
return json(Tools::set_fail('name必须'));
}
if(empty(input('gender'))){
return json(Tools::set_fail('gender必须'));
}
if(empty(input('age'))){
return json(Tools::set_fail('age必须'));
}
if(empty(input('phone'))){
return json(Tools::set_fail('phone必须'));
}
if(!Validate::is_mobile(input('phone'))){
return json(Tools::set_fail('phone格式错误'));
}
//if(empty(input('hdrdepartment_id'))){
// return json(Tools::set_fail('hdrdepartment_id必须'));
//}
$basedata = [
'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',''),//微信号
'from'=>$from,//来源
'ticket'=>$ticket,//对话票据'
'date'=>date('Y-m-d'),
'hdrdepartment_id'=>$hdrdepartment_id,//科室
];
$contentstr = input('content');//对话记录
if(empty($contentstr)){
return json(Tools::set_fail('content必须'));
}
$content['name'] = "\n\n".'【姓名】:'.$basedata['name'];
$content['gender'] = '【性别】:'.$basedata['gender'];
$content['age'] = '【年龄】:'.$basedata['age'];
$content['edu'] = '【教育程度】:'.$basedata['edu'];
$content['career_year'] = '【职业及年限】:'.$basedata['career_year'];
$content['power'] = '【体力要求】:'.$basedata['power'];
$content['satisfaction'] = '【经济满意度】:'.$basedata['satisfaction'];
$content['old_career_year'] = '【过往职业及年限】:'.$basedata['old_career_year'];
$content['old_career_power'] = '【过往体力要求】:'.$basedata['old_career_power'];
$content['support'] = '【社会支持度】:'.$basedata['support'];
$content['marriage'] = '【婚姻状况】:'.$basedata['marriage'];
$content['live'] = '【居住情况】:'.$basedata['live'];
$content['home'] = '【家庭关系】:'.$basedata['home'];
$content['address'] = '【地址】:'.$basedata['address'];
$content['phone'] = '【联系方式】:'.$basedata['phone'];
$content['wechat_no'] = '【微信号】:'.$basedata['wechat_no'];
//
////设置基本信息
//$chatobj->setBefore($content);
$sub_content = json_decode($contentstr,true);
if(empty($sub_content)){
return json(Tools::set_fail('没有对话诊断信息'));
}
//Tools::log_to_write_txt(['聊天记录content'=>$sub_content]);
//$sub_content = array_merge($content,$sub_content);
$ctn_msg_str = implode('',array_column($sub_content,'content'));
foreach ($content as $val){
$ctn_msg_str .= ','.$val;
}
$report_ai_content = '';
//$last_file_report = [];
//if($h5_login_user_phone){
//查询最新的附件
$last_file_report = Db::table(TabConf::$fa_drugs_images_medical_result)
->where('reportid','eq','')
->field('id,reportid,ai_result')
->where('phone',$h5_login_user_phone?$h5_login_user_phone:$basedata['phone'])
->select();
foreach ($last_file_report as $val){
if($report_ai_content){
$report_ai_content.= ',';
}
$report_ai_content .= $val['ai_result']?$val['ai_result']:'';
}
//}
//追加附件
$ctn_msg_str .= <<<EOF
【附件】:{$report_ai_content}
EOF;
$sub_content_msg = [
["role" => "user", "content" => $ctn_msg_str]
];
//chatGpt设置前置聊天上下文
$chatobj->setBefore($sub_content_msg);
//回答
$chatobj->returnAnswer($question,$config,$answer_json_arr);
//dump($answer_json_arr);die;
$res_content = [];
$data = [];
Tools::log_to_write_txt(['请求gpt'=>$chatobj->post_msg_body]);
Tools::log_to_write_txt(['gpt回复'=>$answer_json_arr]);
//把返回的报告保存起来
foreach ($answer_json_arr as $josn){
$item = json_decode($josn,true);
if(empty($item['choices'])){
return json(Tools::set_fail('choices is empty',$answer_json_arr));
}
$choices = $item['choices'];
foreach ($choices as $choice){
$data[] = [
'username'=>$user['username'],//登录的医生
'report_content'=>$choice['message']['content'],
'name'=>$basedata['name'],
'phone'=>$basedata['phone'],
];
$res_content[] = $choice['message']['content'];
}
}
if(empty($data)){
return json(Tools::set_fail('没有获取到报告'));
}
try {
$medical_report_id = '';
foreach ($data as $item){
//只新增不修改
$userbaseinfo_id = Db::table('fa_tt_userbaseinfo')->insert($basedata);
//表示用户信息从h5里面查询而来
if($h5_login_user_phone){//存在表示是通过搜索手机号进入数字人的
$baseuserinfo = Db::table(TabConf::$fa_ty_userbaseinfo)
->where('phone',$h5_login_user_phone)
->order('id desc')
->find();
if(empty($baseuserinfo)){
return json(Tools::set_fail('没有查询到用户信息'));
}
// 科室名称
$basedata['hdrdepartment'] = input('hdrdepartment','');
////修改
//Db::table(TabConf::$fa_tt_userbaseinfo)
// ->where('id',$baseuserinfo['id'])
// ->data($basedata)
// ->update();
$hdruserbaseinfo_id = $baseuserinfo['id'];
}else{
//新增统一基本信息
$basedata['hdrdepartment'] = input('hdrdepartment','');
$hdruserbaseinfo_id = Db::table(TabConf::$fa_tt_userbaseinfo)->insertGetId($basedata);
}
$item['userbaseid'] = $userbaseinfo_id;
$item['hdruserbaseinfo_id'] = $hdruserbaseinfo_id;//统一病历基本信息ID
$item['hdrdepartment_id'] = $hdrdepartment_id;
$item['from'] = $from;//来源:num_per=数智人,ty=听译助手,h5=h5网页问诊
$item['doctor'] = $user['name'];
$item['qa_type'] = $qa_type;
$tmp_data = array_merge($item,$basedata);
//保存报告
$medical_report_id = Db::table('fa_tt_medical_report')->insertGetId($tmp_data);
//日期
//$item['date'] = date('Y-m-d');
//保存疼痛科聊天记录【对话记录跟着报告走】
$this->setTtChatHistory($sub_content,$user['username'],$hdruserbaseinfo_id,$userbaseinfo_id,$ticket,$medical_report_id);
////统一存档(暂时不用)
//Db::table(TabConf::$fa_hdrmedical_report)->insert($item);
}
//循环修改报告id
foreach ($last_file_report as $item_info){
Db::table(TabConf::$fa_drugs_images_medical_result)
->where('id',$item_info['id'])
->data(['reportid'=>$medical_report_id])
->update();
}
return json(Tools::set_ok(['base_data'=>$content,'res_content'=>$res_content,'medical_report_id'=>$medical_report_id]));
}catch (\Exception $e){
Tools::error_txt_log($e);
return json(Tools::set_fail('新增报告失败.'.$e->getMessage()));
}
}
/**
* desc保存疼痛科聊天记录
* authorwh
* @param $sub_content
*/
private function setTtChatHistory($sub_content,$username,$hdruserbaseinfo_id,$userbaseinfo_id,$ticket,$reportid){
//$content = [
// //["role" => "user", "content" => '']
//];
$data = [];
foreach ($sub_content as $item){
$content = explode('',$item['content']);
$d = [
'username'=>$username,
'type'=>empty($content[0])?'':$content[0],
'chat_msg'=>$item['content'],
'ticket'=>$ticket,
'userbaseinfo_id'=>$userbaseinfo_id,
'hdruserbaseinfo_id'=>$hdruserbaseinfo_id,
'reportid'=>$reportid,
];
$data[] = $d;
}
Db::table(TabConf::$fa_tt_chathistory)->insertAll($data);
}
/**
* desc查询报告详情
*
* api/Reporttt/getReportById
* 参数dataid 报告id
* ticket用户ticket
* authorwh
*/
function getReportById(){
return Mmodel::catchJson(function (){
$info = Db::table('fa_tt_medical_report')
->where('id',input('dataid'))
->find();
return Tools::set_ok($info);
});
}
/**
* desc查询报告列表
*
* api/Reporttt/getReportList
* 参数phone
*
* authorwh
*/
function getReportList(){
return Mmodel::catchJson(function (){
$phone = input('phone');
if(empty( $phone)){
return Tools::set_fail( 'phone is empty');
}
$info = Db::table('fa_tt_medical_report')
->where('phone',$phone)
->select();
foreach ($info as &$item){
$item['hdruserbaseinfo_id_data'] = Db::table(TabConf::$fa_tt_userbaseinfo)
->where('id',$item['hdruserbaseinfo_id'])
->find();
}
return Tools::set_ok($info);
});
}
/**
* 修改报告
* api/Reporttt/editReport
* 参数dataid 报告数据id
name 病人姓名
gender 病人性别: M=男性, F=女性
age 病人年龄
main_complaint 主诉
medical_history 病史
past_history 既往史
allergy_history 过敏史
family_history 家族史
personal_history 个人史
menstrual_marital_history 月经婚育史
diagnosis 诊断
treatment 医嘱
*/
// function editReport(){
// return Mmodel::catchJson(function (){
// $dataid = input('dataid');
// if(empty($dataid)){
// return Tools::set_fail('dataid必须');
// }
// //$ticket = input('ticket');
// //if(empty($ticket)){
// // return Tools::set_fail('ticket必须');
// //}
// //修改基本信息
// $data = [
// //'username'=>$user['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',''),//医嘱
// ];
// //查询报告
// $report = Db::table('fa_tt_medical_report')
// ->where('id',$dataid)
// ->find();
// if(empty($report)){
// return Tools::set_fail('报告不存在');
// }
//
// //修改基本信息
// //Mmodel::existsUpdateInsert('fa_tt_userbaseinfo',[
// // 'id'=>$report['userbaseid'],
// //],$data);
//
// //修改报告
// $str = <<<EOF
//【姓名】:{$data['name']}
//【年龄】:{$data['age']}
//【性别】:{$data['gender']}
//【主诉】:{$data['main_complaint']}
//【病史】:{$data['medical_history']}
//【既往史】:{$data['past_history']}
//【过敏史】:{$data['allergy_history']}
//【家族史】:{$data['family_history']}
//【个人史】:{$data['personal_history']}
//【月经婚育史】:{$data['menstrual_marital_history']}
//【诊断】:{$data['diagnosis']}
//【医嘱】:{$data['treatment']}
//EOF;
//
//
//
// Db::table('fa_tt_medical_report')
// ->where('id',$dataid)
// ->data(['report_content'=>$str])
// ->update();
//
// return Tools::set_ok();
// });
// }
}

View File

@@ -0,0 +1,442 @@
<?php
/*
* description
* authorwh
* email
* createTime{2024/7/12} {11:29}
*/
namespace app\api\controller;
use app\common\model\TabConf;
use GatewayWorker\Lib\Gateway;
use think\Db;
use wanghua\general_utility_tools_php\gpt\chat\ChatGPT;
use wanghua\general_utility_tools_php\Mmodel;
use wanghua\general_utility_tools_php\tool\Tools;
/**
* 听译-报告
* Class Reportty
* @package app\api\controller
*/
class Reportty extends BaseHttpApi
{
/**
* desc听译-生成听诊报告
*
* api/Reportty/createReport
* 参数ticket
* from 来源
* client_id
*
* authorwh
*/
function createReport(){
Tools::log_to_write_txt(['input'=>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 = <<<EOF
【对话记录】
$chat_his
【病例报告】
$num_per_report
【体格检查】
{$body_check}
EOF;
//$question = $num_per_report;
$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]);
$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
* authorwh
*/
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
*
*
* authorwh
*/
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 = <<<EOF
【主诉】:{$data['main_complaint']}
【病史】:{$data['medical_history']}
【个人史】:{$data['personal_history']}
【婚姻史】:{$data['menstrual_marital_history']}
【家族史】:{$data['family_history']}
【诊断】:{$data['diagnosis']}
【康复建议】:{$rehabilitation_advice}
【检查建议】:{$test_advice}
EOF;
$dataid = input('dataid');
if(empty($dataid)){
return Tools::set_fail('dataid必须');
}
Db::table('fa_ty_medical_report')
->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();
});
}
}

View File

@@ -0,0 +1,88 @@
<?php
/*
* description
* authorwh
* email
* createTime{2024/10/21} {14:52}
*/
namespace app\api\controller;
use wanghua\general_utility_tools_php\gpt\chat\ChatGPT;
use wanghua\general_utility_tools_php\Mmodel;
use wanghua\general_utility_tools_php\tool\Tools;
class Service extends BaseHttpApi
{
/**
* desc文本转语音
*
* 语音转换服务
*
* api/Service/azurettsAudio
*
* 参数:
* text: 文本内容
*
* authorwh
*/
public function azurettsAudio()
{
$text = input('text','Bagaimana keadaan pernafasan anda?');
$data_raw = input('data_raw','ms-MY');
$data_neural = input('data_neural','YasminNeural');
$service_config = config('voice_to_text_service');
//回答
$url = $service_config['base_url'];//"https://eastasia.tts.speech.microsoft.com/cognitiveservices/v1";
$subscriptionKey = $service_config['APIKey'];//"090287baa7b14fcfb060a70bd1863f2f";
$outputFormat = "audio-48khz-192kbitrate-mono-mp3";
$xmlContent = <<<XML
<?xml version='1.0'?>
<speak version='1.0' xmlns='http://www.w3.org/2001/10/synthesis' xml:lang='{$data_raw}'>
<voice name='{$data_raw}-{$data_neural}'>
{$text}
</voice>
</speak>
XML;
$options = array(
'http' => array(
'header' => "Ocp-Apim-Subscription-Key: $subscriptionKey\r\n" .
"Content-Type: application/ssml+xml\r\n" .
"X-Microsoft-OutputFormat: $outputFormat\r\n" .
"User-Agent: MyTTSApp\r\n", // 添加 User-Agent 头
'method' => 'POST',
'content' => $xmlContent,
),
);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
if ($result === FALSE) {
// 处理错误
//echo "请求失败";
return json(Tools::set_fail('请求失败'));
} else {
$date = date("YmdHis");
$root_path = Tools::get_root_path();
$request_path = '/audio/azure_tts';
$save_path = 'public'.$request_path;
$filepath = $root_path . $save_path;
if (!file_exists($filepath)) {
mkdir($filepath, 0777, true); // 确保目录存在
}
$filename = "/output_$date.mp3";
file_put_contents($filepath . $filename, $result);
//echo "音频文件已生成: $filename";
$domain = request()->domain();
return json(Tools::set_ok('请求成功',$domain.$request_path.$filename));
}
}
function test(){
}
}

View File

@@ -0,0 +1,80 @@
<?php
/*
* description
* authorwh
* email
* createTime{2024/8/13} {11:22}
*/
namespace app\api\controller;
use app\common\model\TabConf;
use think\Db;
use wanghua\general_utility_tools_php\Mmodel;
use wanghua\general_utility_tools_php\sms\AliSms;
use wanghua\general_utility_tools_php\tool\Tools;
use wanghua\general_utility_tools_php\Validate;
class Sms extends BaseHttpApi
{
/**
* desc发送短信验证码
* 参数:
* mobile 手机号
* event 发送场景
*
* api/sms/send
* authorwh
*/
function send(){
return Mmodel::catchJson(function (){
$mobile = input('mobile');
if(empty($mobile)){
return Tools::set_fail('手机号错误');
}
if(!Validate::is_mobile($mobile)){
return Tools::set_fail('手机号错误');
}
//发送间隔不能低于60秒
$sms_record = Db::table(TabConf::$fa_sms)
->where('create_time','>',date('Y-m-d H:i:s',time()-60))
->where('mobile',$mobile)
->order('id desc')
->find();
if($sms_record){
return Tools::set_fail('发送太频繁,请稍后再试');
}
//查询记录10分钟内超过10次禁止发送
$count = Db::table(TabConf::$fa_sms)
->where('create_time','>',date('Y-m-d H:i:s',time()-600))
->where('mobile',$mobile)
->count();
if($count>=10){
return Tools::set_fail('发送次数过多,请稍后再试');
}
$config = config('sms_config');
$code = Tools::rand_str(6,3);
Tools::log_to_write_txt(['发送短信,开始','mobile'=>$mobile,'code'=>$code,'$config'=>$config]);
$res = (new AliSms($config,$config['sms_sign_name'],$config['sms_template_code']))
->send($mobile,json_encode(['code'=>$code]));
Tools::log_to_write_txt(['发送短信,结束',$res]);
//写入发送记录
$sms_data = [
'event'=>input('event'),
'mobile'=>$mobile,
'code'=>$code,
'times'=>0,
'ip'=>request()->ip(),
];
Db::table(TabConf::$fa_sms)->insert($sms_data);
return Tools::set_ok('操作成功',$res);
});
}
}

View File

@@ -0,0 +1,223 @@
<?php
/*
* description
* authorwh
* email
* createTime{2024/11/21} {14:14}
*/
namespace app\api\controller;
use app\common\model\TabConf;
use GatewayWorker\Lib\Gateway;
use think\Db;
use wanghua\general_utility_tools_php\gpt\chat\ChatGPT;
use wanghua\general_utility_tools_php\Mmodel;
use wanghua\general_utility_tools_php\tool\Tools;
/**
* 听译优医助手
* Tingyi Youyi Assistant
*
* Class Tingyiueassistant
* @package app\api\controller
*/
class Tingyiueassistant extends BaseHttpApi
{
/**
* desc听译助手对话优医助手
*
* 参数:
* type助手类型选择助手类型如疼痛科指导医师【必须】
* question :问题【必须】
* phone 患者手机号【必须】
* doctor 医生手机号【必须】
* sessionid 会话id【必须】 从getSayToken接口获得每次对话之前生成用于区分不同会话
*
* 注意:回答完成之后再保存回答记录
*
* authorwh
*/
function chatTy(){
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
header('Connection: keep-alive');
header('X-Accel-Buffering: no');
Tools::log_to_write_txt(['input'=>input()]);
$type = input('type');//选择助手类型
if(empty($type)){
//return json(Tools::set_fail('type必须,选择助手类型:如疼痛科指导医师'));
return Tools::set_event_stream_fail('type必须,选择助手类型:如疼痛科指导医师');
}
$phone = input('phone');
if(empty($phone)){
//return json(Tools::set_fail('phone必须'));
return Tools::set_event_stream_fail('phone患者手机号必须');
}
$doctor = input('doctor');
if(empty($doctor)){
//return json(Tools::set_fail('doctor必须'));
return Tools::set_event_stream_fail('doctor医生手机号必须');
}
$hdruserbaseinfo_id = input('hdruserbaseinfo_id');
if(empty($hdruserbaseinfo_id)){
//return json(Tools::set_fail('hdruserbaseinfo_id必须'));
return Tools::set_event_stream_fail('hdruserbaseinfo_id患者id必须');
}
//会话id
$sessionid = input('sessionid');
if(empty($sessionid)){
//return json(Tools::set_fail('sessionid必须'));
return Tools::set_event_stream_fail('sessionid会话id必须','从getSayToken接口获得每次对话之前生成用于区分不同会话');
}
$reportid = input('reportid');//报告id
if(empty($reportid)){
//return json(Tools::set_fail('reportid必须'));
return Tools::set_event_stream_fail('reportid报告id必须');
}
//查询历史对话记录
//$records = Db::table(TabConf::$fa_tingyiueassistantchathis)
// ->where('sessionid',$sessionid)
// ->where('reportid',$reportid)
// ->order('id desc')
// ->select();
//ai那边不需要对话记录
$qa_history = '';
//foreach ($records as $record) {
// $qa_history .= "{" . $record['question'] . ":
// " . $record['answer'] . "},\n";
//}
$ai_config = config('ai_medical_assistant_config');
$question = input('question','hi');
$chatobj = new ChatGPT();
$chatobj->url = $ai_config['base_url'];
$chatobj->model = '';
$chatobj->apiKey = $ai_config['APIKey'];
$answer_json_arr = [];
$medical_record = Db::table(TabConf::$fa_tt_medical_report)
->where('phone',$phone)
->where('hdruserbaseinfo_id',$hdruserbaseinfo_id)
->find();
$medical_record_report_txt = <<<EOF
患者姓名:{$medical_record['name']}
性别:{$medical_record['gender']}
年龄:{$medical_record['age']}
教育程度:{$medical_record['edu']}
职业及年限:{$medical_record['career_year']}
体力要求:{$medical_record['power']}
经济满意度:{$medical_record['satisfaction']}
过往职业及年限:{$medical_record['old_career_year']}
过往职业体力要求:{$medical_record['old_career_power']}
社会支持度:{$medical_record['support']}
居住情况:{$medical_record['live']}
家庭关系:{$medical_record['home']}
诊断:{$medical_record['diagnosis']}
主诉:{$medical_record['main_complaint']}
病史:{$medical_record['medical_history']}
家族史:{$medical_record['family_history']}
月经婚育史:{$medical_record['menstrual_marital_history']}
医嘱:{$medical_record['treatment']}
EOF;
$config = [
'stream'=>true,
'chatId'=>$sessionid,
'variables'=>[
'agent_selection'=>$type,
'medical_record'=>$medical_record_report_txt,
]
];
//$sub_content_msg = [
// ["role" => "user", "content" => $question]
//];
//$chatobj->setBefore($sub_content_msg);
$chat_content = <<<EOF
$question
$qa_history
EOF;
$chatobj->chat($chat_content,$config,$answer_json_arr);
//保存对话记录
$data = [
'phone'=>$phone,
'question'=>$question,
'doctor'=>$doctor,
'sessionid'=>$sessionid,
'reportid'=>$reportid
];
$record_id = Db::table(TabConf::$fa_tingyiueassistantchathis)
->insertGetId($data);
Tools::log_to_write_txt(['听译助手对话优医助手请求gpt:'=>$chatobj->post_msg_body,'患者资料'=>$medical_record_report_txt]);
Tools::log_to_write_txt(['听译助手对话优医助手gpt回复:'=>$answer_json_arr]);
//return json(Tools::set_ok('ok',['record_id'=>$record_id]));
return Tools::set_event_stream_ok('ok',['record_id'=>$record_id]);
}
/**
* 保存回答记录
*
* 参数:
* record_id记录id
* answer回答
* phone患者手机号
*
* authorwh
*/
function saveAnswer(){
return Mmodel::catchJson(function (){
$record_id = input('record_id');
$answer = input('answer');
$phone = input('phone');//患者手机号
if(empty($record_id)){
return Tools::set_fail('record_id必须');
}
if(empty($answer)){
return Tools::set_fail('answer必须');
}
if(empty($phone)){
return Tools::set_fail('患者手机号必须');
}
$record = Db::table(TabConf::$fa_tingyiueassistantchathis)
->where('id',$record_id)
->where('phone',$phone)
->find();
if(empty($record)){
return Tools::set_fail('记录不存在');
}
Db::table(TabConf::$fa_tingyiueassistantchathis)
->data([
'answer'=>$answer,
])
->where('id',$record_id)
->where('phone',$phone)
->update();
return Tools::set_ok('ok');
});
}
}

View File

@@ -0,0 +1,101 @@
<?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\tool\Tools;
use wanghua\general_utility_tools_php\Validate;
use think\Controller;
class Ttchathistory extends BaseHttpApi
{
protected $controller_comments = '疼痛科聊天历史';
/**
* desc获取疼痛科聊天历史
*
* api/Ttchathistory/getTtchathistoryList
*
* 参数:
* 带分页
* current_page 当前页码
* list_rows 每页显示条数 默认15
* hdruserbaseinfo_id 统一基本信息 统一基本信息 必须
*
* 所有字段说明<span style="color: gray">(可能有部分额外字段未在此体现)</span>
* id ID
* username 用户
* type 聊天角色
* chat_msg 问诊内容
* ticket 对话票据(用于隔离用户聊天历史记录)
* userbaseinfo_id 基本信息ID
* create_time 创建时间
* hdruserbaseinfo_id 统一基本信息
* authorwh
*/
function getTtchathistoryList(){
Tools::log_to_write_txt(['获取疼痛科聊天历史 入参:'=>input()]);
$api_desc = '获取疼痛科聊天历史';
try {
//$hdruserbaseinfo_id = input('hdruserbaseinfo_id');
//if(empty($hdruserbaseinfo_id)){
// return json(Tools::set_fail('hdruserbaseinfo_id参数错误'));
//}
$reportid = input('reportid');
if(empty($reportid)){
return json(Tools::set_fail('reportid参数错误'));
}
//查询最新的ticket
//$last_ticket = Db::table(TabConf::$fa_tt_chathistory)
// ->where('hdruserbaseinfo_id',$hdruserbaseinfo_id)
// ->order('id desc')
// ->value('ticket');
$model_obj = Db::table(TabConf::$fa_tt_chathistory);
//if(!empty($last_ticket)){
// $model_obj->where('ticket',$last_ticket);
//}
//【对话记录跟着报告走】
$model_obj->where('reportid',$reportid);
//if(input('hdruserbaseinfo_id')){
// $model_obj->where('hdruserbaseinfo_id',input('hdruserbaseinfo_id'));
//}
$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,'操作异常',[]));
}
}
}

View File

@@ -0,0 +1,664 @@
<?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\http\Curl;
use wanghua\general_utility_tools_php\tool\Tools;
use wanghua\general_utility_tools_php\Validate;
use think\Controller;
class Ttmedicalreport extends BaseHttpApi
{
protected $controller_comments = '疼痛科病历报告(听译问诊)(一个基本信息对应一个报告)';
/**
* desc获取疼痛科病历报告一个基本信息对应一个报告
*
* api/Ttmedicalreport/getTtmedicalreportDetail
*
* 参数:
* hdruserbaseinfo_id 统一基本信息 统一基本信息 必须
*
* 所有字段说明<span style="color: gray">(可能有部分额外字段未在此体现)</span>
* id ID
* userbaseid 基本信息ID
* doctor 所属医生
* username 病人
* report_content 报告内容
* name 病人姓名
* phone 病人电话
* from 来源:num_per=数智人,ty=听译助手,h5=h5网页问诊
* create_time 生成时间
* ticket 对话票据(数据隔离)
* hdruserbaseinfo_id 统一基本信息
* authorwh
*/
function getTtmedicalreportDetail(){
Tools::log_to_write_txt(['获取疼痛科病历报告(一个基本信息对应一个报告) 入参:'=>input()]);
$api_desc = '获取疼痛科病历报告(一个基本信息对应一个报告)';
try {
$hdruserbaseinfo_id = input('hdruserbaseinfo_id');
if(empty($hdruserbaseinfo_id)){
return json(Tools::set_fail('hdruserbaseinfo_id参数错误'));
}
$model_obj = Db::table(TabConf::$fa_tt_medical_report);
if(input('hdruserbaseinfo_id')){
$model_obj->where('hdruserbaseinfo_id',input('hdruserbaseinfo_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,'操作异常',[]));
}
}
/**
* desc根据id查询报告
*
* reportid 报告id
*
* api/Ttmedicalreport/getTtmedicalreportDetailbyId
* authorwh
*/
function getTtmedicalreportDetailbyId(){
Tools::log_to_write_txt(['根据id查询报告 入参:'=>input()]);
$api_desc = '根据id查询报告';
try {
$reportid = input('reportid');
if(empty($reportid)){
return json(Tools::set_fail('reportid参数错误'));
}
$model_obj = Db::table(TabConf::$fa_tt_medical_report);
$model_obj->where('id',$reportid);
$item = $model_obj->find();
$data = $item;
return json(Tools::set_ok('ok',$data));
}catch(\Exception $e){
Tools::log_to_write_txt([
'error'=>'根据id查询报告.异常.'.$e->getMessage(),
'参数'=>input(),
'error_info'=>$e->getTraceAsString()
]);
return json(Tools::set_res(500,'操作异常',[]));
}
}
/**
* desc获取疼痛科病历报告(听译问诊)(一个基本信息对应一个报告)
*
* api/Ttmedicalreport/getTtmedicalreportList
*
* 参数:
* 带分页
* current_page 当前页码
* list_rows 每页显示条数 默认15
* userbaseid 基本信息ID
* doctor 所属医生
* username 病人
* report_content 报告内容
* name 病人姓名
* phone 病人电话
* from 来源:num_per=数智人,ty=听译助手,h5=h5网页问诊
* hdruserbaseinfo_id 统一基本信息
* hdrdepartment_id 科室
*
* 所有字段说明<span style="color: gray">(可能有部分额外字段未在此体现)</span>
* id ID
* userbaseid 基本信息ID
* doctor 所属医生
* username 病人
* report_content 报告内容
* name 病人姓名
* phone 病人电话
* from 来源:num_per=数智人,ty=听译助手,h5=h5网页问诊
* create_time 生成时间
* ticket 对话票据(数据隔离)
* hdruserbaseinfo_id 统一基本信息
* hdrdepartment_id 科室
* authorwh
*/
function getTtmedicalreportList(){
Tools::log_to_write_txt(['获取疼痛科病历报告(听译问诊)(一个基本信息对应一个报告) 入参:'=>input()]);
$api_desc = '获取疼痛科病历报告(听译问诊)(一个基本信息对应一个报告)';
try {
$userbaseid = input('userbaseid');
$doctor = input('doctor');
$username = input('username');
$report_content = input('report_content');
$name = input('name');
$phone = input('phone');
$from = input('from');
$hdruserbaseinfo_id = input('hdruserbaseinfo_id');
$hdrdepartment_id = input('hdrdepartment_id');
$status = input('status');
$model_obj = Db::table(TabConf::$fa_tt_medical_report);
if(input('userbaseid')){
$model_obj->where('userbaseid',input('userbaseid'));
}
if(isset($status)){
$model_obj->where('status',$status);
}
if(input('doctor')){
$model_obj->where('doctor',input('doctor'));
}
if(input('username')){
$model_obj->where('username',input('username'));
}
if(input('report_content')){
$model_obj->where('report_content',input('report_content'));
}
if(input('name')){
$model_obj->where('name',input('name'));
}
if(input('phone')){
$model_obj->where('phone',input('phone'));
}
if(input('from')){
$model_obj->where('from',input('from'));
}
if(input('hdruserbaseinfo_id')){
$model_obj->where('hdruserbaseinfo_id',input('hdruserbaseinfo_id'));
}
if(input('hdrdepartment_id')){
$model_obj->where('hdrdepartment_id',input('hdrdepartment_id'));
}
$data = $model_obj->paginate(['page'=>input('current_page',1),'list_rows'=>input('list_rows',15)])
->each(function($item, $key){
return $item;
});
Tools::log_to_write_txt(['查询sql:'=>$model_obj->getLastSql()]);
// ['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,'操作异常',[]));
}
}
/**
* 新增疼痛科病历报告(听译问诊)(一个基本信息对应一个报告)
*
* 参数:
* userbaseid 基本信息ID
* doctor 所属医生 【必须】
* username 医生电话(账号) 【必须】
* report_content 报告内容
* name 病人姓名 【必须】
* phone 病人电话 【必须】
* from 来源:num_per=数智人,ty=听译助手,h5=h5网页问诊,doc_add=医生添加 【必须】
* ticket 对话票据(数据隔离) 【必须】
* qa_type 问答模式:free=自由问答,fix=固定问答 【必须】
* hdruserbaseinfo_id 统一基本信息 【必须】
* hdrdepartment_id 科室 【必须】
* uniqueid 唯一ID 【必须】
* api/Ttmedicalreport/addTtmedicalreport
*/
function addTtmedicalreport(){
Tools::log_to_write_txt(['新增疼痛科病历报告(听译问诊)(一个基本信息对应一个报告)'=>input()]);
$api_desc = '新增疼痛科病历报告(听译问诊)(一个基本信息对应一个报告)';
Db::startTrans();
try {
$userbaseid = input('userbaseid');
$doctor = input('doctor');
if(empty($doctor)){
return json(Tools::set_fail('参数错误.1',['error_msg'=>'错误信息doctor错误']));
}
$username = input('username');
if(empty($username)){
return json(Tools::set_fail('参数错误.2',['error_msg'=>'错误信息username错误']));
}
$report_content = input('report_content');
$name = input('name');
if(empty($name)){
return json(Tools::set_fail('参数错误.4',['error_msg'=>'错误信息name错误']));
}
$phone = input('phone');
if(empty($phone)){
return json(Tools::set_fail('参数错误.5',['error_msg'=>'错误信息phone错误']));
}
$from = input('from');
if(empty($from)){
return json(Tools::set_fail('参数错误.6',['error_msg'=>'错误信息from错误']));
}
$ticket = input('ticket');
if(empty($ticket)){
return json(Tools::set_fail('参数错误.7',['error_msg'=>'错误信息ticket错误']));
}
$qa_type = input('qa_type');
if(empty($qa_type)){
return json(Tools::set_fail('参数错误.8',['error_msg'=>'错误信息qa_type错误']));
}
$hdruserbaseinfo_id = input('hdruserbaseinfo_id');
if(empty($hdruserbaseinfo_id)){
return json(Tools::set_fail('参数错误.9',['error_msg'=>'错误信息hdruserbaseinfo_id错误']));
}
$hdrdepartment_id = input('hdrdepartment_id');
if(empty($hdrdepartment_id)){
return json(Tools::set_fail('参数错误.10',['error_msg'=>'错误信息hdrdepartment_id错误']));
}
$uniqueid = input('uniqueid');
if(empty($uniqueid)){
return json(Tools::set_fail('参数错误.11',['error_msg'=>'错误信息uniqueid错误']));
}
$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错误']));
}
$data = [
'userbaseid'=>$userbaseid?:'',
'doctor'=>$doctor?:'',
'username'=>$username?:'',
'report_content'=>$report_content?:'',
'name'=>$name?:'',
'phone'=>$phone?:'',
'from'=>$from?:'',
'ticket'=>$ticket?:'',
'qa_type'=>$qa_type?:'',
'hdruserbaseinfo_id'=>$hdruserbaseinfo_id?:'',
'hdrdepartment_id'=>$hdrdepartment_id?:'',
'uniqueid'=>$uniqueid?:'',
'gender'=>$gender?:'',
'age'=>$age?:''
];
$dataid = Db::table(TabConf::$fa_tt_medical_report)->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());
}
}
/**
* 根据报告ID修改报告
* 参数:
* id ID 【必须】
* doctor 所属医生
* username 医生电话(账号)
* report_content 报告内容
* name 病人姓名
* phone 病人电话
* from 来源:num_per=数智人,ty=听译助手,h5=h5网页问诊,doc_add=医生添加
* qa_type 问答模式:free=自由问答,fix=固定问答
* hdruserbaseinfo_id 统一基本信息
* hdrdepartment_id 科室
* hdrdepartment 科室名称
* gender 病人性别
* age 病人年龄
* edu 教育程度
* career_year 职业及年限
* power 体力要求
* satisfaction 经济满意度
* old_career_year 过往职业及年限
* old_career_power 过往职业体力要求
* support 社会支持度
* marriage 婚姻状况
* live 居住情况
* home 家庭关系
* address 地址
* wechat_no 微信号
* is_flow 是否接受随访:yes=是,no=否
* diagnosis 诊断
* main_complaint 主诉
* medical_history 病史
* past_history 既往史
* allergy_history 过敏史
* family_history 家族史
* personal_history 个人史
* menstrual_marital_history 月经婚育史
* treatment 医嘱
* api/Ttmedicalreport/updateTtReportById
*
*/
function updateTtReportById(){
Tools::log_to_write_txt(['根据报告ID修改报告'=>input()]);
$api_desc = '根据报告ID修改报告';
Db::startTrans();
try {
$doctor = input('doctor');
$username = input('username');
$report_content = input('report_content');
$name = input('name');
$phone = input('phone');
$from = input('from');
$qa_type = input('qa_type');
$hdruserbaseinfo_id = input('hdruserbaseinfo_id');
$hdrdepartment_id = input('hdrdepartment_id');
$hdrdepartment = input('hdrdepartment');
$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');
$wechat_no = input('wechat_no');
$is_flow = input('is_flow');
$diagnosis = input('diagnosis');
$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');
$treatment = input('treatment');
if(empty(input('id'))){
return json(Tools::set_fail('参数错误。0',['error_msg'=>'错误信息id错误']));
}
//存在则修改
$data = [];
if($doctor){
$data['doctor'] = $doctor;
}
if($username){
$data['username'] = $username;
}
if($name){
$data['name'] = $name;
}
if($phone){
$data['phone'] = $phone;
}
if($from){
$data['from'] = $from;
}
if($qa_type){
$data['qa_type'] = $qa_type;
}
if($hdruserbaseinfo_id){
$data['hdruserbaseinfo_id'] = $hdruserbaseinfo_id;
}
if($hdrdepartment_id){
$data['hdrdepartment_id'] = $hdrdepartment_id;
}
if($hdrdepartment){
$data['hdrdepartment'] = $hdrdepartment;
}
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($wechat_no){
$data['wechat_no'] = $wechat_no;
}
if($is_flow){
$data['is_flow'] = $is_flow;
}
if($main_complaint){
$data['main_complaint'] = $main_complaint;
// $report_content .= <<<EOF
//\n【主诉】$main_complaint
//EOF;
// }else{
// $report_content .= <<<EOF
//\n【主诉】
//EOF;
}
if($medical_history){
$data['medical_history'] = $medical_history;
// $report_content .= <<<EOF
//\n【病史】$medical_history
//EOF;
// }else{
// $report_content .= <<<EOF
//\n【病史】
//EOF;
}
if($personal_history){
$data['personal_history'] = $personal_history;
// $report_content .= <<<EOF
//\n【个人史】$personal_history
//EOF;
// }else{
// $report_content .= <<<EOF
//\n【个人史】
//EOF;
}
if($menstrual_marital_history){
$data['menstrual_marital_history'] = $menstrual_marital_history;
// $report_content .= <<<EOF
//\n【婚姻史】$menstrual_marital_history
//EOF;
// }else{
// $report_content .= <<<EOF
//\n【婚姻史】
//EOF;
}
if($family_history){
$data['family_history'] = $family_history;
// $report_content .= <<<EOF
//\n【家族史】$family_history
//EOF;
// }else{
// $report_content .= <<<EOF
//\n【家族史】
//EOF;
}
if($diagnosis){
$data['diagnosis'] = $diagnosis;
// $report_content .= <<<EOF
//\n【诊断】$diagnosis
//EOF;
// }else{
// $report_content .= <<<EOF
//\n【诊断】
//EOF;
}
if($past_history){
$data['past_history'] = $past_history;
// $report_content .= <<<EOF
//\n【既往史】$past_history
//EOF;
// }else{
// $report_content .= <<<EOF
//\n【既往史】
//EOF;
}
if($allergy_history){
$data['allergy_history'] = $allergy_history;
// $report_content .= <<<EOF
//\n【过敏史】$allergy_history
//EOF;
// }else{
// $report_content .= <<<EOF
//\n【过敏史】
//EOF;
}
if($treatment){
$data['treatment'] = $treatment;
}
if($report_content){
$data['report_content'] = $report_content;
}
$dataid = Db::table(TabConf::$fa_tt_medical_report)
->data($data)
->where('id',input('id'))
->update();
//$this->operateLog('根据报告ID修改报告',api_user_info('id'));
Db::commit();
//if($hdruserbaseinfo_id){
// $data['id'] = $hdruserbaseinfo_id;
// $url = request()->domain().'/api/Hdruserbaseinfo/updateHdruserbaseinfoById';
// Tools::log_to_write_txt(['修改基本信息'=>$data,'url'=>$url]);
// $res = Curl::curl_post($url,$data);
// Tools::log_to_write_txt(['修改基本信息返回,结束'=>$res]);
//}
return json(Tools::set_ok('ok',$dataid));
}catch (\Exception $e){
Db::rollback();
Tools::log_to_write_txt([
'error'=>'根据报告ID修改报告.异常.'.$e->getMessage(),
'input'=>input(),
'error_info'=>$e->getTraceAsString()
]);
return json(Tools::set_fail());
}
}
}

View File

@@ -0,0 +1,85 @@
<?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\tool\Tools;
use wanghua\general_utility_tools_php\Validate;
use think\Controller;
class Ttuserbaseinfo extends BaseHttpApi
{
protected $controller_comments = '疼痛科用户基本信息';
/**
* desc获取疼痛科用户基本信息
*
* api/Ttuserbaseinfo/getTtuserbaseinfoDetail
*
* 参数:
* id ID ID 必须
*
* 所有字段说明<span style="color: gray">(可能有部分额外字段未在此体现)</span>
* id ID
* date 日期
* doctor 所属医生
* name 病人姓名
* gender 病人性别
* age 病人年龄
* edu 教育程度
* career_year 职业及年限
* power 体力要求
* satisfaction 经济满意度
* old_career_year 过往职业及年限
* old_career_power 过往职业体力要求
* support 社会支持度
* marriage 婚姻状况
* live 居住情况
* home 家庭关系
* address 地址
* phone 联系方式
* wechat_no 微信号
* create_time 创建时间
* is_flow 是否接受随访:yes=是,no=否
* ticket 对话票据(数据隔离)
* hdrdepartment_id 科室
* from 来源:num_per=数智人,ty=听译助手,h5=h5网页问诊
* authorwh
*/
function getTtuserbaseinfoDetail(){
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_tt_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,'操作异常',[]));
}
}

View File

@@ -0,0 +1,25 @@
<?php
/*
* description
* authorwh
* email
* createTime{2024/7/15} {16:13}
*/
namespace app\api\controller;
/**
* @deprecated
* 听译聊天
* Class Tychat
* @package app\api\controller
*/
class Tychat
{
function saveChat(){
return Mmodel::catchJson(function (){
});
}
}

View File

@@ -0,0 +1,84 @@
<?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\tool\Tools;
use wanghua\general_utility_tools_php\Validate;
use think\Controller;
class Tychathistory extends BaseHttpApi
{
protected $controller_comments = '听译-聊天历史';
/**
* desc获取听译-聊天历史
*
* api/Tychathistory/getTychathistoryList
*
* 参数:
* 带分页
* current_page 当前页码
* list_rows 每页显示条数 默认15
* hdruserbaseinfo_id 统一基本信息 统一基本信息 必须
*
* 所有字段说明<span style="color: gray">(可能有部分额外字段未在此体现)</span>
* id ID
* username 用户
* type 聊天角色
* chat_msg 问诊内容
* ticket 对话票据(数据隔离)
* create_time 创建时间
* hdruserbaseinfo_id 统一基本信息
* authorwh
*/
function getTychathistoryList(){
Tools::log_to_write_txt(['获取听译-聊天历史 入参:'=>input()]);
$api_desc = '获取听译-聊天历史';
try {
$hdruserbaseinfo_id = input('hdruserbaseinfo_id');
if(empty($hdruserbaseinfo_id)){
return json(Tools::set_fail('hdruserbaseinfo_id参数错误'));
}
$model_obj = Db::table(TabConf::$fa_ty_chathistory);
if(input('hdruserbaseinfo_id')){
$model_obj->where('hdruserbaseinfo_id',input('hdruserbaseinfo_id'));
}
$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,'操作异常',[]));
}
}
}

View File

@@ -0,0 +1,67 @@
<?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\tool\Tools;
use wanghua\general_utility_tools_php\Validate;
use think\Controller;
class Tyfollowup extends BaseHttpApi
{
protected $controller_comments = '随访记录(听译助手)';
/**
* desc获取随访记录(听译助手)
*
* api/Tyfollowup/getTyfollowupDetail
*
* 参数:
* report_dataid 报告ID 报告ID 必须
*
* 所有字段说明<span style="color: gray">(可能有部分额外字段未在此体现)</span>
* id ID
* report_dataid 报告ID
* name 姓名
* phone 电话
* content 随访内容
* create_time 随访时间
* authorwh
*/
function getTyfollowupDetail(){
Tools::log_to_write_txt(['获取随访记录(听译助手) 入参:'=>input()]);
$api_desc = '获取随访记录(听译助手)';
try {
$report_dataid = input('report_dataid');
if(empty($report_dataid)){
return json(Tools::set_fail('report_dataid参数错误'));
}
$model_obj = Db::table(TabConf::$fa_ty_followup);
if(input('report_dataid')){
$model_obj->where('report_dataid',input('report_dataid'));
}
$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,'操作异常',[]));
}
}
}

View File

@@ -0,0 +1,414 @@
<?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\tool\Tools;
use wanghua\general_utility_tools_php\Validate;
use think\Controller;
class Tymedicalreport extends BaseHttpApi
{
protected $controller_comments = '听译-病历报告(听译问诊)(一个基本信息对应一个报告)';
/**
* desc获取听译-病历报告(听译问诊)(一个基本信息对应一个报告)
*
* api/Tymedicalreport/getTymedicalreportDetail
*
* 参数:
* hdruserbaseinfo_id 统一基本信息 统一基本信息 必须
*
* 所有字段说明<span style="color: gray">(可能有部分额外字段未在此体现)</span>
* id ID
* userbaseid 听译病历ID
* doctor 所属医生
* username 病人
* report_content 报告内容
* name 病人姓名
* gender 病人性别
* from 来源:num_per=数智人,ty=听译助手,h5=h5网页问诊
* ticket 对话票据(数据隔离)
* diagnostic_result 诊断结果
* create_time 生成时间
* hdruserbaseinfo_id 统一基本信息
* authorwh
*/
function getTymedicalreportDetail(){
Tools::log_to_write_txt(['获取听译-病历报告(听译问诊)(一个基本信息对应一个报告) 入参:'=>input()]);
$api_desc = '获取听译-病历报告(听译问诊)(一个基本信息对应一个报告)';
try {
$hdruserbaseinfo_id = input('hdruserbaseinfo_id');
if(empty($hdruserbaseinfo_id)){
return json(Tools::set_fail('hdruserbaseinfo_id参数错误'));
}
$model_obj = Db::table(TabConf::$fa_ty_medical_report);
if(input('hdruserbaseinfo_id')){
$model_obj->where('hdruserbaseinfo_id',input('hdruserbaseinfo_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,'操作异常',[]));
}
}
function updateTingyiReportById(){
Tools::log_to_write_txt(['根据报告ID修改听译报告最终报告'=>input()]);
$api_desc = '根据报告ID修改听译报告最终报告';
Db::startTrans();
try {
$username = input('username');
$report_content = input('report_content');
$name = input('name');
$gender = input('gender');
$from = input('from');
$diagnostic_result = input('diagnostic_result');
if(empty(input('id'))){
return json(Tools::set_fail('参数错误。0',['error_msg'=>'错误信息id错误']));
}
//存在则修改
$data = [];
if($username){
$data['username'] = $username;
}
if($report_content){
$data['report_content'] = $report_content;
}
if($name){
$data['name'] = $name;
}
if($gender){
$data['gender'] = $gender;
}
if($from){
$data['from'] = $from;
}
if($diagnostic_result){
$data['diagnostic_result'] = $diagnostic_result;
}
$dataid = Db::table(TabConf::$fa_ty_medical_report)
->data($data)
->where('id',input('id'))
->update();
Db::commit();
return json(Tools::set_ok('ok',$dataid));
}catch (\Exception $e){
Db::rollback();
Tools::log_to_write_txt([
'error'=>'根据报告ID修改听译报告最终报告.异常.'.$e->getMessage(),
'input'=>input(),
'error_info'=>$e->getTraceAsString()
]);
return json(Tools::set_fail());
}
}
/**
* 修改听译-病历报告(听译问诊)(一个基本信息对应一个报告)
* 参数:
* id ID 【必须】
* userbaseid 听译病历ID
* doctor 所属医生
* username 病人
* report_content 报告内容
* name 病人姓名
* gender 病人性别
* from 来源:num_per=数智人,ty=听译助手,h5=h5网页问诊
* ticket 对话票据(数据隔离)
* diagnostic_result 诊断结果
* hdruserbaseinfo_id 统一基本信息
* create_time 生成时间
* age 病人年龄
* main_complaint 主诉
* medical_history 病史
* past_history 既往史
* allergy_history 过敏史
* family_history 家族史
* personal_history 个人史
* menstrual_marital_history 月经婚育史
* diagnosis 诊断
* treatment 医嘱
* phone 联系方式
* status 问诊状态
* user_phone 登录手机号
* date 日期
* hdrdepartment 科室名称
* hdrdepartment_id 科室
* edu 教育程度
* career_year 职业及年限
* power 体力要求
* satisfaction 经济满意度
* old_career_year 过往职业及年限
* old_career_power 过往职业体力要求
* support 社会支持度
* marriage 婚姻状况
* live 居住情况
* home 家庭关系
* address 地址
* wechat_no 微信号
* api/Tymedicalreport/updateTymedicalreportById
*/
function updateTymedicalreportById(){
Tools::log_to_write_txt(['修改听译-病历报告(听译问诊)(一个基本信息对应一个报告)'=>input()]);
$api_desc = '修改听译-病历报告(听译问诊)(一个基本信息对应一个报告)';
Db::startTrans();
try {
$userbaseid = input('userbaseid');
$doctor = input('doctor');
$username = input('username');
$report_content = input('report_content');
$name = input('name');
$gender = input('gender');
$from = input('from');
$ticket = input('ticket');
$diagnostic_result = input('diagnostic_result');
$hdruserbaseinfo_id = input('hdruserbaseinfo_id');
$create_time = input('create_time');
$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');
$phone = input('phone');
$status = input('status');
$user_phone = input('user_phone');
$date = input('date');
$hdrdepartment = input('hdrdepartment');
$hdrdepartment_id = input('hdrdepartment_id');
$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');
$wechat_no = input('wechat_no');
if(empty(input('id'))){
return json(Tools::set_fail('参数错误。0',['error_msg'=>'错误信息id错误']));
}
//存在则修改
$data = [];
if($userbaseid){
$data['userbaseid'] = $userbaseid;
}
if($doctor){
$data['doctor'] = $doctor;
}
if($username){
$data['username'] = $username;
}
if($report_content){
$data['report_content'] = $report_content;
}
if($name){
$data['name'] = $name;
}
if($gender){
$data['gender'] = $gender;
}
if($from){
$data['from'] = $from;
}
if($ticket){
$data['ticket'] = $ticket;
}
if($diagnostic_result){
$data['diagnostic_result'] = $diagnostic_result;
}
if($hdruserbaseinfo_id){
$data['hdruserbaseinfo_id'] = $hdruserbaseinfo_id;
}
if($create_time){
$data['create_time'] = $create_time;
}
if($age){
$data['age'] = $age;
}
if($main_complaint){
$data['main_complaint'] = $main_complaint;
}
if($medical_history){
$data['medical_history'] = $medical_history;
}
if($past_history){
$data['past_history'] = $past_history;
}
if($allergy_history){
$data['allergy_history'] = $allergy_history;
}
if($family_history){
$data['family_history'] = $family_history;
}
if($personal_history){
$data['personal_history'] = $personal_history;
}
if($menstrual_marital_history){
$data['menstrual_marital_history'] = $menstrual_marital_history;
}
if($diagnosis){
$data['diagnosis'] = $diagnosis;
}
if($treatment){
$data['treatment'] = $treatment;
}
if($phone){
$data['phone'] = $phone;
}
if($status){
$data['status'] = $status;
}
if($user_phone){
$data['user_phone'] = $user_phone;
}
if($date){
$data['date'] = $date;
}
if($hdrdepartment){
$data['hdrdepartment'] = $hdrdepartment;
}
if($hdrdepartment_id){
$data['hdrdepartment_id'] = $hdrdepartment_id;
}
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($wechat_no){
$data['wechat_no'] = $wechat_no;
}
$dataid = Db::table(TabConf::$fa_ty_medical_report)
->data($data)
->where('id',input('id'))
->update();
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());
}
}

View File

@@ -0,0 +1,253 @@
<?php
/*
* description
* authorwh
* email
* createTime{2024/8/10} {11:25}
*/
namespace app\api\controller;
use app\api\logic\TtchatLogic;
use app\common\model\TabConf;
use think\Db;
use wanghua\general_utility_tools_php\Mmodel;
use wanghua\general_utility_tools_php\Validate;
use wanghua\general_utility_tools_php\tool\Tools;
class Usersh5 extends BaseHttpApi
{
public function __construct()
{
//if(!self::checkLogin()){
// echo json_encode(['code'=>591,'msg'=>'未登录']);exit;
//}
}
/**
* 检查登录
*/
static function checkLogin(){
return Mmodel::catch(function (){
$ticket = input('ticket');
if(empty($ticket)){
return false;//默认未登录
}
$user = Db::table(TabConf::$fa_hdrusersh5)->where('ticket',$ticket)->cache(300)->find();
if(empty($user)){
return false;//默认未登录
}
return true;
});
}
/**
* desch5-授权,登录
*
* /api/Usersh5/login
*
* 参数:
* username 用户名(手机号)
* code 验证码
*
* authorwh
*/
function login()
{
return Mmodel::catchJson(function (){
$doctor = input('doctor');
if(empty($doctor)){
return Tools::set_fail('doctor所属医生参数错误:1');
}
if(!Validate::is_mobile($doctor)){
return Tools::set_fail('doctor医生手机号错误:2');
}
$username = input('username');
if(empty($username)){
return Tools::set_fail('参数错误:1');
}
$code = input('code');//验证码
if(empty($code)){
return Tools::set_fail('验证码错误:2');
}
if(!Validate::is_mobile($username)){
return Tools::set_fail('手机号错误:2');
}
//校验验证码
if(empty($code)){
return Tools::set_fail('验证码错误:2');
}
//查询短信验证码
$sms = Db::table(TabConf::$fa_sms)
->where('mobile',$username)
->where('code',$code)
->order('id desc')
->find();
if(empty($sms)){
return Tools::set_res(340,'验证码错误:3');
}
if($sms['event'] != 'login'){
return Tools::set_fail('场景错误:4');
}
if($sms['times'] > 1){
return Tools::set_fail('该验证码已失效:4');
}
$user = Db::table(TabConf::$fa_hdrusersh5)
->where('username',$username)
->find();
//返回票据
$ticketstr = md5($username);
$expires = 30*86400+time();//报告完成之后重新获取票据
if(empty($user)){
//注册
$user = Db::table(TabConf::$fa_hdrusersh5)
->data([
'username'=>$username,
'ticket'=>$ticketstr,
'expires'=>$expires,
'doctor'=>$doctor,
'expire_time'=>date('Y-m-d H:i:s',$expires)
])
->insert();
}
//修改验证码验证次数
Db::table(TabConf::$fa_sms)
->where('id',$sms['id'])
->setInc('times');
$uniqueid = md5($ticketstr.$expires.Tools::rand_str(6));
//修改有效期
Db::table(TabConf::$fa_hdrusersh5)
->data([
'ticket'=>$ticketstr,
'expires'=>$expires,//7天
'doctor'=>$doctor,//每次扫码更新医生
'expire_time'=>date('Y-m-d H:i:s',$expires)
])
->where('username',$username)
->update();
//查询最新的基本信息id
$baseuserinfo_id = Db::table(TabConf::$fa_ty_userbaseinfo)
->where('phone',$username)
->order('id desc')
->value('id');
return Tools::set_ok('登录成功',[
'ticket'=>$ticketstr,'uniqueid'=>$uniqueid,
'username'=>$username,'user'=>$user,
'baseuserinfo_id'=>$baseuserinfo_id
]);
});
}
/**
* desch5-根据id查询用户
* api/Usersh5/getUserById
* 参数:
* dataid 用户id
* authorwh
*/
function getUserById(){
return Mmodel::catchJson(function (){
$dataid = input('dataid');
if(empty($dataid)){
return Tools::set_fail('参数错误');
}
$data = Db::table(TabConf::$fa_hdrusersh5)
->where('id',$dataid)
->find();
return Tools::set_res(200,'查询成功',$data);
});
}
/**
* desch5-保存聊天记录
*
* api/Usersh5/saveChatHistory
*
* authorwh
*/
//function saveChatHistory(){
// return Mmodel::catchJson(function (){
// $obj = new TtchatLogic();
// $chat_content = input('chat_content');
// if(empty($chat_content)){
// return Tools::set_fail('参数错误');
// }
// $res = $obj->saveChatHistory($chat_content);
// return Tools::set_ok('ok',$res);
// });
//}
/**
* h5-修改基本信息
* api/Usersh5/editBaseinfo
* 参数ticket
*
name 病人姓名
gender 病人性别
age 病人年龄
edu 教育程度
caree职业及年限r_year
power体力要求
satisfaction 经济满意度
old_car过往职业及年限eer_year
support 社会支持度
marriage 婚姻状况
live 居住情况
home 家庭关系
addres地址s
phone 联系方式
wechat_no微信号
*/
//function editBaseinfo(){
// return Mmodel::catchJson(function (){
// //$ticket = input('ticket');
// //if(empty($ticket)){
// // return Tools::set_fail('ticket必须');
// //}
// //$user = Db::table(TabConf::$fa_hdrusersh5)->where('ticket',$ticket)->find();
// //if(empty($user)){
// // return Tools::set_fail('ticket错误未查询到用户');
// //}
// $userid = input('userid');
// if(empty($userid)){
// return Tools::set_fail('h5用户id必须');
// }
// //修改基本信息
// $data = [
// //'doctor'=>$user['username'],//医生
// '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',''),//过往职业及年限
// 'support'=>input('support',''),//社会支持度
// 'marriage'=>input('marriage',''),//婚姻状况
// 'live'=>input('live',''),//居住情况
// 'home'=>input('home',''),//家庭关系
// 'address'=>input('address',''),//地址
// 'phone'=>input('phone',''),//联系方式
// 'wechat_no'=>input('wechat_no',''),//微信号
//
// ];
// Mmodel::existsUpdateInsert(TabConf::$fa_ty_userbaseinfo,[
// 'id'=>$userid,
// ],$data);
//
// return Tools::set_ok();
// });
//}
}

View File

@@ -0,0 +1,278 @@
<?php
/*
* description
* authorwh
* email
* createTime{2024/3/26} {20:55}
*/
namespace app\api\controller;
use app\api\logic\TtchatLogic;
use app\api\logic\TychatLogic;
use app\api\logic\UserOfflinePrizeLogic;
use app\common\model\TabConf;
use GatewayWorker\Lib\Gateway;
use think\Db;
use think\Exception;
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\wechat\UserAuth;
/**
* 疼痛科用户
* Class Userstt
* @package app\api\controller
*/
class Userstt extends BaseHttpApi
{
/**
* desc疼痛科-根据id查询用户
* api/Userstt/getUserById
* 参数:
* dataid 用户id
* authorwh
*/
function getUserById(){
return Mmodel::catchJson(function (){
$dataid = input('dataid');
if(empty($dataid)){
return Tools::set_fail('参数错误');
}
$data = Db::table('fa_hdrdoctorusers')
->where('id',$dataid)
->find();
return Tools::set_res(200,'查询成功',$data);
});
}
/**
* desc疼痛科-授权,登录
*
* /api/Userstt/login
*
* 参数:clientid 客户端标识
* username 用户名
* password 密码
*
* authorwh
*/
function login()
{
return Mmodel::catchJson(function (){
//$clientid = input('clientid');
//if(empty($clientid)){
// return Tools::set_fail('clientid error');
//}
$username = input('username');
if(empty($username)){
return Tools::set_fail('参数错误:1');
}
$password = input('password');
if(empty($password)){
return Tools::set_fail('参数错误:2');
}
$user = Db::table('fa_hdrdoctorusers')
->where('username',$username)
->find();
if(empty($user)){
return Tools::set_fail('用户不存在');
}
if($password != $user['password']){
return Tools::set_fail('密码错误');
}
//session('api_user_info',$user);
unset($user['password']);
$expires = 7*86400+time();//报告完成之后重新获取票据
//返回票据
$ticketstr = md5($user['username']);
//修改有效期
Db::table('fa_hdrdoctorusers')
->data([
'ticket'=>$ticketstr,
'expires'=>$expires,//7天
//'clientid'=>$clientid,
])
->where('username',$username)
->update();
return Tools::set_ok('登录成功',['ticket'=>$ticketstr,'username'=>$username,'user'=>$user]);
});
}
/**
* desc疼痛科-保存聊天记录
*
* api/Userstt/saveChatHistory
*
* authorwh
*/
function saveChatHistory(){
return Mmodel::catchJson(function (){
$obj = new TtchatLogic();
$chat_content = input('chat_content');
if(empty($chat_content)){
return Tools::set_fail('参数错误');
}
$res = $obj->saveChatHistory($chat_content);
return Tools::set_ok('ok',$res);
});
}
/**
* 疼痛科-修改基本信息
* api/Userstt/editBaseinfo
* 参数ticket
*
name 病人姓名
gender 病人性别
age 病人年龄
edu 教育程度
caree职业及年限r_year
power体力要求
satisfaction 经济满意度
old_car过往职业及年限eer_year
support 社会支持度
marriage 婚姻状况
live 居住情况
home 家庭关系
addres地址s
phone 联系方式
wechat_no微信号
*/
function editBaseinfo(){
return Mmodel::catchJson(function (){
$ticket = input('ticket');
if(empty($ticket)){
return Tools::set_fail('ticket必须');
}
$user = Db::table('fa_hdrdoctorusers')->where('ticket',$ticket)->find();
if(empty($user)){
return Tools::set_fail('ticket错误');
}
//修改基本信息
$data = [
'doctor'=>$user['username'],//医生
'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',''),//过往职业及年限
'support'=>input('support',''),//社会支持度
'marriage'=>input('marriage',''),//婚姻状况
'live'=>input('live',''),//居住情况
'home'=>input('home',''),//家庭关系
'address'=>input('address',''),//地址
'phone'=>input('phone',''),//联系方式
'wechat_no'=>input('wechat_no',''),//微信号
];
Mmodel::existsUpdateInsert('fa_tt_userbaseinfo',[
'username'=>$user['username'],
'name'=>input('name',''),
],$data);
return Tools::set_ok();
});
}
/**
* desc提交自由问答记录后台需要单独列出来对话时前端缓存在本地对话结束提交
*
* 参数:
* ticket 对话票据(结束问诊时重新生成)
* username 用户名
* content 对话内容,格式:
* content = [
["role" => "user", "content" => '1'],
["role" => "user", "content" => '2'],
["role" => "user", "content" => '3'],
];
*
* api/Userstt/subFreeQuestionAnswerRecord
*
* authorwh
*/
function subFreeQuestionAnswerRecord(){
return Mmodel::catchJson(function (){
$ticket = input('ticket');
if(empty($ticket)){
return Tools::set_fail('ticket必须');
}
$content = input('content');
if(empty($content)){
return Tools::set_fail('content对话内容必须');
}
$username = input('username');
if(empty($username)){
return Tools::set_fail('username必须');
}
$this->setTtFreeChatHistory($content,$username,$ticket);
return Tools::set_ok();
});
}
/**
* desc保存疼痛科自由对话聊天记录
* authorwh
* @param $sub_content
*/
private function setTtFreeChatHistory($sub_content,$username,$ticket){
//$content = [
// //["role" => "user", "content" => '']
//];
$data = [];
foreach ($sub_content as $item){
$content = explode('',$item['content']);
$d = [
'username'=>$username,
'type'=>empty($content[0])?'':$content[0],
'chat_msg'=>$item['content'],
'ticket'=>$ticket,
];
$data[] = $d;
}
Db::table(TabConf::$fa_tt_free_chathistory)->insertAll($data);
}
/**
* 诊断完成
* api/Userstt/diagFinish
* 参数report_id 报告id
*/
function diagFinish(){
return Mmodel::catchJson(function (){
$report_id = input('report_id');
if(empty($report_id)){
return Tools::set_fail('参数错误');
}
//查询报告
$report = Db::table(TabConf::$fa_tt_medical_report)->where('id',$report_id)->find();
if(empty($report)){
return Tools::set_fail('报告不存在');
}
if($report['status']==2){
return Tools::set_fail('报告已诊断完成,请勿重复提交');
}
$res = Db::table(TabConf::$fa_tt_medical_report)->where('id',$report_id)->update(['status'=>2]);
return Tools::set_ok('ok',$res);
});
}
}

View File

@@ -0,0 +1,174 @@
<?php
/*
* description
* authorwh
* email
* createTime{2024/3/26} {20:55}
*/
namespace app\api\controller;
use app\api\logic\TychatLogic;
use app\api\logic\UserOfflinePrizeLogic;
use app\common\model\TabConf;
use GatewayWorker\Lib\Gateway;
use think\Db;
use think\Exception;
use wanghua\general_utility_tools_php\gpt\chat\ChatGPT;
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\wechat\UserAuth;
/**
* 听译-用户
* Class Users
* @package app\api\controller
*/
class Usersty extends BaseHttpApi
{
/**
* desc听译-授权,登录
*
* /api/Usersty/login
*
* 参数:clientid 客户端标识
* username 用户名
* password 密码
*
* authorwh
*/
function login()
{
return Mmodel::catchJson(function (){
$clientid = input('clientid');
if(empty($clientid)){
return Tools::set_fail('clientid error');
}
$username = input('username');
if(empty($username)){
return Tools::set_fail('参数错误:1');
}
$password = input('password');
if(empty($password)){
return Tools::set_fail('参数错误:2');
}
$user = Db::table('fa_hdrdoctorusers')
->where('username',$username)
->find();
if(empty($user)){
return Tools::set_fail('用户不存在');
}
if($password != $user['password']){
return Tools::set_fail('密码错误');
}
//session('api_user_info',$user);
unset($user['password']);
//未登录
$expires = 7*86400+time();
$ticketstr = md5($user['username']);
//修改有效期
Db::table('fa_hdrdoctorusers')
->data([
'qa_chat_ticket'=>$ticketstr,
'ticket'=>$ticketstr,
'expires'=>$expires,//7天
])
->where('username',$username)
->update();
unset($user['qa_chat_ticket']);
return Tools::set_ok('登录成功',['ticket'=>$ticketstr,'user'=>$user]);
});
}
/**
* desc 绑定设备(选择角色时调用)
*
* api/Usersty/bindDevice
*
* 参数username
* clientid
* type 用户类型:user=用户,doc=医生
*/
//function bindDevice(){
// return Mmodel::catchJson(function (){
// //绑定设备
// $devidata = [
// 'username'=>input('username'),
// 'clientid'=>input('clientid'),
// 'type'=>input('type'),
// 'login_time'=>Tools::get_now_date(),
// ];
// Mmodel::existsUpdateInsert('fa_device',[
// 'username'=>input('username'),
// 'clientid'=>input('clientid'),
// ],$devidata);
// return Tools::set_ok('绑定成功');
// });
//}
/**
* 医生问诊提示
*
* 请求类型post
* 请求地址:/api/Usersty/getTips
* 参数:
* hdruserbaseinfo_id 基本信息id
*/
function getTips(){
return Mmodel::catchJson(function (){
$config = config('ai_doctor_tips_config');
//$hdruserbaseinfo_id = input('hdruserbaseinfo_id');
//if(empty($hdruserbaseinfo_id)){
// return Tools::set_fail('hdruserbaseinfo_id参数错误');
//}
$reportid = input('reportid');
if(empty($reportid)){
return Tools::set_fail('reportid参数错误');
}
//$content = [
// ["role" => "user", "content" => '']
//];
$chatobj = new ChatGPT();
$chatobj->url = $config['base_url'];
$chatobj->model = '';
$chatobj->apiKey = $config['APIKey'];
$answer_json_arr = [];
//查询病历报告
$report = Db::table(TabConf::$fa_tt_medical_report)
//->where('hdruserbaseinfo_id',$hdruserbaseinfo_id)
//->order('id desc')
->where('id',$reportid)
->find();
if(empty($report)){
return Tools::set_fail('暂无病历报告');
}
$config = [
'stream'=>false,
];
$question = $report['report_content'];//input('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]);
return Tools::set_ok('ok',['tips'=>$answer_json_arr]);
});
}
}

View File

@@ -0,0 +1,98 @@
<?php
/*
* description
* authorwh
* email
* createTime{2024/4/5} {19:51}
*/
namespace app\api\controller;
use app\api\logic\StatisticsLogic;
use app\common\model\TabConf;
use GatewayWorker\Lib\Gateway;
use think\Db;
use wanghua\general_utility_tools_php\Date;
use wanghua\general_utility_tools_php\tool\Tools;
/**
* socket 主动推送
*
* Class Wsspush
* @package app\api\controller
*/
class Wsspush extends BaseWssApi
{
/**
* desc向指定客户端发送信息
*
* api/wsspush/index/socketTaskId/xxxx
*
* authorwh
*/
public function index()
{
$socketTaskId = input('socketTaskId');
Gateway::sendToClient($socketTaskId,json_encode(Tools::set_ok('向指定客户端发送信息。',$socketTaskId),JSON_UNESCAPED_UNICODE));
}
/**
* desc向所有客户端发消息
* api/wsspush/pushToAll
* authorwh
* @throws \Exception
*/
function pushToAll(){
//$json = Tools::wss_json_ok('Reportty/createReport','ok',['flow_code'=>'create_report_end']);
//Gateway::sendToAll($json);
}
public function hello($name = 'ThinkPHP5')
{
return 'hello,' . $name;
}
/**
* desc向客户端推送消息
*
* 接收一维数组表单
*
* /api/wsspush/pushMessageToClient
*
* authorwh
*/
function pushMessageToClient(){
$socketTaskId = input('clientid');
if(empty($socketTaskId)){
return json(Tools::set_fail('客户端id必须'));
}
$action = input('action');
if(empty($action)){
return json(Tools::set_fail('ACTION MUST'));
}
$msg = input('msg');
if(empty($msg)){
return json(Tools::set_fail('MSG MUST'));
}
$all_params = [];
foreach (input() as $key=>$item){
if(in_array($key, ['clientid','action','msg'])){
continue;
}
$all_params[$key] = $item;
}
//json_encode(Tools::set_ok('向指定客户端发送信息。',$socketTaskId),JSON_UNESCAPED_UNICODE);
$json = self::json_wss($action,$msg,$all_params);
Gateway::sendToClient($socketTaskId, $json);
return json(Tools::set_ok('向指定客户端发送信息成功。'));
}
}