limit(205) -> field('content',true) -> select(); for($i = 0; $i < count($recContent); $i++){ $mapPat['pat_visit_info_id'] = array('eq',$recContent[$i]['pat_visit_info_id']); $name = db('pat_visit_info') -> where($mapPat) -> value('pat_name'); $patId = db('pat_visit_info') -> where($mapPat) -> value('pat_id'); $pageId = db('pat_visit_info') -> where($mapPat) -> value('page_id'); $recContent[$i]['name'] = mb_substr($name, 0, 1, 'UTF-8') . '**'; $recContent[$i]['pat_id'] = $patId; $recContent[$i]['page_id'] = $pageId; } $user = request() -> param('user'); //构造请求数据 return view('index', [ 'recContent' => $recContent, 'device' => $device, 'year' => $year, 'commonURL' => $commonURL, 'now' => $now, 'commonOpenURL' => $commonOpenURL, 'user' => $user, ]); } //整合最终的参数并发起请求 public function wsRequest(){ $user = request() -> param('user'); $patId = request() -> param('patId'); $pageId = request() -> param('pageId'); $doc = request() -> param('doc'); //查询病历唯一标识 $mapPat['pat_id'] = array('eq',$patId); $mapPat['page_id'] = array('eq',$pageId); $patVisitId = db('pat_visit_info') -> where($mapPat) -> value('pat_visit_info_id'); $name = db('pat_visit_info') -> where($mapPat) -> value('pat_name'); //查询对应的病历原始文本 $mapRec['pat_visit_info_id'] = array('eq',$patVisitId); $mapRec['type_name'] = array('eq',$doc); $recContent = db('medical_rec') -> where($mapRec) -> find(); //自然文本质控 $recContentInfo = '科室名称:'.$recContent['dept_name'].'。 诊疗文书原文:'.$recContent['content']; //json文本指控 $mapRecContent['mr_id'] = array('eq',$recContent['mr_id']); $recContentJson = db('medical_rec_content') -> where($mapRecContent) -> select(); foreach ($recContentJson as &$subarray) { // 移除 'id' 和 'mr_id' 键 unset($subarray['id'], $subarray['mr_id']); } // 销毁引用以避免潜在问题 unset($subarray); $dept['mr_title'] = '部门'; $dept['mr_text'] = $recContent['dept_name']; $recContentJson[count($recContentJson)] = $dept; $recContentJson = json_encode($recContentJson,JSON_UNESCAPED_UNICODE); //最终输出 $recContentFinal = [ [ 'role' => 'user', 'content' => $recContentJson ], ]; //组装请求的数据为base64格式 $data['model'] = 'emoon-E2-7B'; $data['network'] = '1'; $data['input'] = $recContentFinal; $data = json_encode($data,JSON_UNESCAPED_UNICODE); $data = base64_encode($data); //对请求的参数进行sm4加密 $smIV = getSMIV(); $config = [ 'mode' => 'cbc', 'key' => 'iRMFdLrIrwV7xiep', // 16 字节二进制密钥 'iv' => $smIV, // 16 字节二进制 IV 'hash' => false ]; $sm4 = new EvitSM4Encryption($config); $encryptedBinary = $sm4->encrypt($data); // 将二进制结果转换为 Base64 $encryptedBase64 = base64_encode($encryptedBinary); //创建最终的含有sm4的iv的数据 $modifiedData['encryptedBase64'] = $encryptedBase64; $modifiedData['smIV'] = $smIV; $modifiedData['publicKey'] = 'Vt8kKsWQqQhkTvhsdwIPYmcaZfPmCJp1'; $modifiedData = json_encode($modifiedData,JSON_UNESCAPED_UNICODE); $modifiedData = base64_encode($modifiedData); // 将 '+' 替换为 '-','/' 替换为 '_' $modifiedData = strtr($modifiedData, '+/', '-_'); //将加密的参数发送给开放平台,获取短令牌 $urlOpen = commonOpenURL().'/Apis/getToken'; $encryption['information'] = $modifiedData; $token = curlPost($urlOpen,$encryption); $token = stdClassObjToArray(json_decode($token)); //构建最终的请求内容 $dataRequest['user'] = $user; $dataRequest['name'] = mb_substr($name, 0, 1, 'UTF-8') . '**'; $dataRequest['doc'] = $doc; $dataRequest['token'] = $token['token']; $url = commonURL().'/Send/websocket'; curlPost($url,$dataRequest); return '已将该「病历原文」发送至「医梦AI客户端」'; } //中联web AI质控接口地址 public function httpRequest(){ //获取输入的内容 $json = file_get_contents('php://input'); $data = json_decode($json, true); //{"messages":[ {"role":"user","content":"请问你是什么模型?"}]} $message = $data['messages'] ?? null; //组装请求的数据为base64格式 $data['model'] = 'deepseek-R1-8B'; $data['network'] = '2'; $data['input'] = $message; $data = json_encode($data,JSON_UNESCAPED_UNICODE); $data = base64_encode($data); //对请求的参数进行sm4加密 $smIV = getSMIV(); $config = [ 'mode' => 'cbc', 'key' => 'sYq9QbK6E1FI2Hi9', // 16 字节二进制密钥 'iv' => $smIV, // 16 字节二进制 IV 'hash' => false ]; $sm4 = new EvitSM4Encryption($config); $encryptedBinary = $sm4->encrypt($data); // 将二进制结果转换为 Base64 $encryptedBase64 = base64_encode($encryptedBinary); //创建最终的含有sm4的iv的数据 $modifiedData['encryptedBase64'] = $encryptedBase64; $modifiedData['smIV'] = $smIV; $modifiedData['publicKey'] = 'l5zI6lwxHLcCQ8LfQRwpvLLNv2WjMbj2'; $modifiedData = json_encode($modifiedData,JSON_UNESCAPED_UNICODE); $modifiedData = base64_encode($modifiedData); // 将 '+' 替换为 '-','/' 替换为 '_' $modifiedData = strtr($modifiedData, '+/', '-_'); //将加密的参数发送给开放平台,获取短令牌 $urlOpen = commonOpenURL().'/Apis/getToken'; $encryption['information'] = $modifiedData; $token = curlPost($urlOpen,$encryption); $token = stdClassObjToArray(json_decode($token)); //构建最终的请求内容 $dataRequest['token'] = $token['token']; $url = commonOpenURLHTTP(); $result = curlPost($url,$dataRequest); return $result; } //创建实时质控页面 public function qualityNow(){ //判断用户设备是否是移动端 if(isMobile() == true){ $device = 'phone'; } else{ $device = 'pc'; } //获取当前年份 $year = date('Y',time()); //获取公共路径 $commonURL = commonURL(); //获取公共路径 $commonOpenURL = commonOpenURL(); //获取当前时间 $now = date('Y-m-d H:i:s',time()); $user = request() -> param('user'); //构造请求数据 return view('qualityNow', [ 'device' => $device, 'year' => $year, 'commonURL' => $commonURL, 'now' => $now, 'commonOpenURL' => $commonOpenURL, 'user' => $user, ]); } //创建实时获取病历列表 public function getDoc(){ // $data['patId'] = '4213806'; // $data['pageId'] = '1'; // $data['patId'] = request() -> param('patId'); // $data['pageId'] = request() -> param('pageId'); $url = commonDataURL().'/His/getDoc'; $result = curlPost($url,$data); return json($result); } //创建实时获取病历内容 public function getRec(){ // $data['mrId'] = '2d26e278-7028-4103-8ba8-1b4625473d35'; $dataMrId['mrId'] = request() -> param('mrId'); $urlMrId = commonDataURL().'/His/getRec'; $result = curlPost($urlMrId,$dataMrId); //请求websocket客户端发送数据 $recContentFinal = [ [ 'role' => 'user', 'content' => $result ], ]; //组装请求的数据为base64格式 $data['model'] = 'emoon-E2-7B'; $data['network'] = '1'; $data['input'] = $recContentFinal; $data = json_encode($data,JSON_UNESCAPED_UNICODE); $data = base64_encode($data); //对请求的参数进行sm4加密 $smIV = getSMIV(); $config = [ 'mode' => 'cbc', 'key' => 'iRMFdLrIrwV7xiep', // 16 字节二进制密钥 'iv' => $smIV, // 16 字节二进制 IV 'hash' => false ]; $sm4 = new EvitSM4Encryption($config); $encryptedBinary = $sm4->encrypt($data); // 将二进制结果转换为 Base64 $encryptedBase64 = base64_encode($encryptedBinary); //创建最终的含有sm4的iv的数据 $modifiedData['encryptedBase64'] = $encryptedBase64; $modifiedData['smIV'] = $smIV; $modifiedData['publicKey'] = 'Vt8kKsWQqQhkTvhsdwIPYmcaZfPmCJp1'; $modifiedData = json_encode($modifiedData,JSON_UNESCAPED_UNICODE); $modifiedData = base64_encode($modifiedData); // 将 '+' 替换为 '-','/' 替换为 '_' $modifiedData = strtr($modifiedData, '+/', '-_'); //将加密的参数发送给开放平台,获取短令牌 $urlOpen = commonOpenURL().'/Apis/getToken'; $encryption['information'] = $modifiedData; $token = curlPost($urlOpen,$encryption); $token = stdClassObjToArray(json_decode($token)); //构建最终的请求内容 $user = request() -> param('user'); $typeName = request() -> param('typeName'); $name = substr($typeName,0,strpos($typeName, '-')); $doc = substr($typeName,strripos($typeName,"-")+1); $dataRequest['user'] = $user; $dataRequest['name'] = $name; $dataRequest['doc'] = $doc; $dataRequest['token'] = $token['token']; $url = commonURL().'/Send/websocket'; curlPost($url,$dataRequest); return '已将该「病历原文」发送至「医梦AI客户端」'; } //his传入参数触发客户端质控 public function hisOpen(){ $user = request() -> param('user'); $patId = request() -> param('patId'); $pageId = request() -> param('pageId'); $ragId = request() -> param('ragId'); //获取当前用户的病历列表 $dataDoc['patId'] = $patId; $dataDoc['pageId'] = $pageId; $urlGetDoc = commonDataURL().'/His/getDoc'; $docs = curlPost($urlGetDoc,$dataDoc); $docsArray = json_decode($docs); // dump($docsArray); // exit; $docsArray = stdClassObjToArray($docsArray); $docsJson = json_encode($docsArray,JSON_UNESCAPED_UNICODE); //将令牌存储 $tokenData['info'] = $docsJson; $tokenData['time'] = time(); $docsJsonCut = substr($docsJson, 0, 20); $docsCode = md5($docsJsonCut.time().rand(10000,99999)); $tokenData['token'] = $docsCode; // dump($docs); // exit; $urlGetIntel = commonDataURL().'/His/getintel'; $dataIntel = curlPost($urlGetIntel,$dataDoc); $dataIntel = json_decode($dataIntel); $dataIntel = stdClassObjToArray($dataIntel); $dataIntel = json_encode($dataIntel,JSON_UNESCAPED_UNICODE); $tokenData['intel'] = $dataIntel; db('token') -> insert($tokenData); // dump($tokenData); // exit; $mapToken['token'] = array('eq',$docsCode); $docsJson = db('token') -> where($mapToken) -> value('info'); // dump($tokenData); // exit; //跳转chatbox if($ragId != null){ $url = commonURL().'/Index/chatBox?user='.$user.'&docsCode='.$docsCode.'&ragId='.$ragId; } else{ $url = commonURL().'/Index/chatBox?user='.$user.'&docsCode='.$docsCode; } $this -> redirect($url); } //his传入参数触发客户端质控 public function hisOpendemo(){ $user = request() -> param('user'); $patId = request() -> param('patId'); $pageId = request() -> param('pageId'); $ragId = request() -> param('ragId'); //获取当前用户的病历列表 $dataDoc['patId'] = $patId; $dataDoc['pageId'] = $pageId; $urlGetDoc = commonDataURL().'/His/getDoc'; $docs = curlPost($urlGetDoc,$dataDoc); $docsArray = json_decode($docs); // dump($docsArray); // exit; $docsArray = stdClassObjToArray($docsArray); $docsJson = json_encode($docsArray,JSON_UNESCAPED_UNICODE); //将令牌存储 $tokenData['info'] = $docsJson; $tokenData['time'] = time(); $docsJsonCut = substr($docsJson, 0, 20); $docsCode = md5($docsJsonCut.time().rand(10000,99999)); $tokenData['token'] = $docsCode; // dump($docs); // exit; $urlGetIntel = commonDataURL().'/His/getintel'; $dataIntel = curlPost($urlGetIntel,$dataDoc); $dataIntel = json_decode($dataIntel); $dataIntel = stdClassObjToArray($dataIntel); $dataIntel = json_encode($dataIntel,JSON_UNESCAPED_UNICODE); $tokenData['intel'] = $dataIntel; db('token') -> insert($tokenData); // dump($tokenData); // exit; $mapToken['token'] = array('eq',$docsCode); $docsJson = db('token') -> where($mapToken) -> value('info'); // dump($tokenData); // exit; //跳转chatbox if($ragId != null){ $url = commonURL().'/Index/chatBox1?user='.$user.'&docsCode='.$docsCode; } else{ $url = commonURL().'/Index/chatBox1?user='.$user.'&docsCode='.$docsCode; } $this -> redirect($url); } public function hisOpen3(){ $user = request() -> param('user'); $patId = request() -> param('patId'); $pageId = request() -> param('pageId'); $ragId = request() -> param('ragId'); // $ragId="1968853249568628738"; //获取当前用户的病历列表 $dataDoc['patId'] = $patId; $dataDoc['pageId'] = $pageId; $urlGetDoc = commonDataURL().'/His/getDoc'; $docs = curlPost($urlGetDoc,$dataDoc); $docsArray = json_decode($docs); $docsArray = stdClassObjToArray($docsArray); $docsJson = json_encode($docsArray,JSON_UNESCAPED_UNICODE); dump($docsJson); exit; //将令牌存储 $tokenData['info'] = $docsJson; $tokenData['time'] = time(); $docsJsonCut = substr($docsJson, 0, 20); $docsCode = md5($docsJsonCut.time().rand(10000,99999)); $tokenData['token'] = $docsCode; $urlGetIntel = commonDataURL().'/His/getintel'; $dataIntel = curlPost($urlGetIntel,$dataDoc); $dataIntel = json_decode($dataIntel); $dataIntel = stdClassObjToArray($dataIntel); $dataIntel = json_encode($dataIntel,JSON_UNESCAPED_UNICODE); $tokenData['intel'] = $dataIntel; db('token') -> insert($tokenData); $mapToken['token'] = array('eq',$docsCode); $docsJson = db('token') -> where($mapToken) -> value('info'); //跳转chatbox if($ragId != null){ $url = commonURL().'/Index/chatBox?user='.$user.'&docsCode='.$docsCode.'&ragId='.$ragId; } else{ $url = commonURL().'/Index/chatBox?user='.$user.'&docsCode='.$docsCode; } $this -> redirect($url); } //接受hisOpen发送过来的病历列表并推送 public function hisOpenPush(){ // $user = 6666; $user = request() -> param('user'); $docsCode = request() -> param('docsCode'); // $docsCode = "2fa0e00ffd00d6e92b04a24bbd6dac1d"; $mapToken['token'] = array('eq',$docsCode); $docsJson = db('token') -> where($mapToken) -> value('info'); $dataIntel = db('token') -> where($mapToken) -> value('intel'); $dataIntel = json_decode($dataIntel); $dataIntel = stdClassObjToArray($dataIntel); $tokenrole['pat_name'] = $dataIntel['pat_name']; $tokenrole['out_num'] = $dataIntel['out_num']; $tokenrole['in_num'] = $dataIntel['in_num']; $tokenrole['id_num'] = $dataIntel['id_num']; // return $docsJson; if(!$docsJson){ return json('客户端短令牌错误!'); } $docsArray = json_decode($docsJson); $docsArray = stdClassObjToArray($docsArray); // dump($docsJson); // exit; //通过病历列表获取病历原文 for($i = 0; $i < count($docsArray); $i++){ $name = substr($docsArray[$i]['TYPE_NAME'],0,strpos($docsArray[$i]['TYPE_NAME'], '-')); $docName = substr($docsArray[$i]['TYPE_NAME'],strripos($docsArray[$i]['TYPE_NAME'],"-")+1); //请求病历原文 $mrId = $docsArray[$i]["MR_ID"]; $dataMrId['mrId'] = $mrId; $urlMrId = commonDataURL().'/His/getRec'; $recs = curlPost($urlMrId,$dataMrId); $recs = json_decode($recs); $recs = stdClassObjToArray($recs); $keshi = $recs[count($recs)-1]['mr_text']; $tokenrole['DEPT_NAME'] = $keshi; $dataFinal = ''; for($r=0;$rwhere($map)->value('rulepath'); if($rulename != null){ $maprule['rulepath'] = array('like', '%'.$rulename.'%'); // $ruleIdArray = array( 'RYJLXBS0013', 'RYJLXBS0012','RYJL0002', 'RYJLXX0001', 'RYJLZS0000', 'RYJLZS0001', 'RYJLZS0002', 'RYJLZS0003', 'RYJLZS0004', 'RYJLZS0005', 'RYJLXBS0000', 'RYJLXBS0001', 'RYJLXBS0002', 'RYJLXBS0003', 'RYJLXBS0004', 'RYJLXBS0005', 'RYJLXBS0006', 'RYJLXBS0008', 'RYJLXBS0009', 'RYJLXBS0010', 'RYJLXBS0011', 'RYJLJWS0000', 'RYJLJWS0001', 'RYJLJWS0002', 'RYJLJWS0003', 'RYJLJWS0004', 'RYJLJWS0005', 'RYJLJWS0006', 'RYJLJWS0007', 'RYJLJWS0010', 'RYJLGRS0000', 'RYJLHY0002', 'RYJLJZS0000', 'RYJLJZS0001', 'RYJLTGJC0000', 'RYJLTGJC0001', 'RYJLTGJC0002', 'RYJLTGJC0003', 'RYJLTGJC0004', 'RYJLTGJC0005', 'RYJLTGJC0006', 'RYJLTGJC0007', 'RYJLTGJC0008', 'RYJLZKJC0000', 'RYJLZKJC0001', 'RYJLFZJC0000', 'RYJLFZJC0001', 'RYJLFZJC0002', 'RYJLFZJC0003', 'RYJLFZJC0004', 'RYJLFZJC0007', 'RYJLFZJC0008', 'RYJLCBZD0000', 'RYJLCBZD0001', 'SCBC0000', 'SCBC0001', 'SCBC0003', 'SCBC0004', 'SCBC0005', 'RCBC0000', 'RCBC0001', 'RCBC0003', 'RCBC0007', 'RCBC0015', 'RCBC0019', 'RCBC0020', 'RCBC0022', 'RCBC0023', 'RCBC0024', 'RCBC0025', 'RCBC0026', 'RCBC0027', 'RCBC0028', 'RCBC0038', 'RCBC0039', 'RCBC0044', 'CYJL0002', 'CYJL0003', 'CYJL0004', 'CYJL0005', 'CYJL0006', 'CYJL0007', 'CYJL0008', 'CYJL0009', 'CYJL0011', 'CYJL0012', 'HZJL0000', 'HZJL0001', 'HZJL0002', 'HZJL0003', 'HZJL0004', 'HZJL0005', 'SQXJ0000', 'SQXJ0001', 'RCBC0040', 'RCBC0041'); $ruleIdArray = array('RYJLXBS0013', 'RYJLXBS0012','RYJL0002', 'RYJLXX0001', 'RYJLZS0000', 'RYJLZS0001', 'RYJLZS0002', 'RYJLZS0003', 'RYJLZS0004', 'RYJLZS0005', 'RYJLXBS0000', 'RYJLXBS0001', 'RYJLXBS0002', 'RYJLXBS0003', 'RYJLXBS0004', 'RYJLXBS0005', 'RYJLXBS0006', 'RYJLXBS0007', 'RYJLXBS0008', 'RYJLXBS0009', 'RYJLXBS0010', 'RYJLXBS0011', 'RYJLJWS0000', 'RYJLJWS0001', 'RYJLJWS0002', 'RYJLJWS0003', 'RYJLJWS0004', 'RYJLJWS0005', 'RYJLJWS0006', 'RYJLJWS0007', 'RYJLJWS0009', 'RYJLJWS0010', 'RYJLJWS0011', 'RYJLGRS0000', 'RYJLHY0002', 'RYJLJZS0000', 'RYJLJZS0001', 'RYJLTGJC0000', 'RYJLTGJC0001', 'RYJLTGJC0002', 'RYJLTGJC0003', 'RYJLTGJC0004', 'RYJLTGJC0005', 'RYJLTGJC0006', 'RYJLTGJC0007', 'RYJLTGJC0008', 'RYJLZKJC0000', 'RYJLZKJC0001', 'RYJLFZJC0000', 'RYJLFZJC0001', 'RYJLFZJC0002', 'RYJLFZJC0003', 'RYJLFZJC0004', 'RYJLFZJC0007', 'RYJLFZJC0008', 'RYJLCBZD0000', 'RYJLCBZD0001', 'SCBC0000', 'SCBC0001', 'SCBC0003', 'SCBC0004', 'SCBC0005', 'RCBC0001', 'RCBC0003', 'RCBC0007', 'RCBC0011', 'RCBC0015', 'RCBC0019', 'RCBC0024', 'RCBC0025', 'RCBC0026', 'RCBC0027', 'RCBC0038', 'RCBC0039', 'RCBC0044', 'CYJL0008', 'CYJL0009', 'CYJL0011', 'CYJL0012', 'HZJL0000', 'HZJL0001', 'HZJL0002', 'HZJL0003', 'HZJL0005', 'SQXJ0000', 'SQXJ0001', 'RCBC0040', 'RCBC0041', 'SCBC0002', 'SWJL0007', 'CYJL0013', 'ZQTY0012', 'ZQTY0013'); $maprule['ruleid'] = array('in', $ruleIdArray); $rulename = db('rulefinal')->where($maprule)->select(); //dump(count($rulename)); //exit; // //查询某一列数据 // $rule = db('User')->column('name'); for($j=0;$j之间。"'; //请求websocket客户端发送数据 $recContentFinal = [ [ 'role' => 'user', 'content' => $dataFinalcount ], ]; //组装请求的数据为base64格式 $data = []; $data['model'] = 'gstcm-G1-14B'; $data['network'] = '2'; $data['input'] = $recContentFinal; $data = json_encode($data,JSON_UNESCAPED_UNICODE); $data = base64_encode($data); //对请求的参数进行sm4加密 $smIV = getSMIV(); $config = [ 'mode' => 'cbc', 'key' => 'kdOVYNCDa50ZaKQF', // 16 字节二进制密钥 'iv' => $smIV, // 16 字节二进制 IV 'hash' => false ]; $sm4 = new EvitSM4Encryption($config); $encryptedBinary = $sm4->encrypt($data); // 将二进制结果转换为 Base64 $encryptedBase64 = base64_encode($encryptedBinary); //创建最终的含有sm4的iv的数据 $modifiedData = []; $modifiedData['encryptedBase64'] = $encryptedBase64; $modifiedData['smIV'] = $smIV; $modifiedData['publicKey'] = '6c5McfXGHnB0lmX2ir4sRvx6YBXlgxew'; $modifiedData = json_encode($modifiedData,JSON_UNESCAPED_UNICODE); $modifiedData = base64_encode($modifiedData); // 将 '+' 替换为 '-','/' 替换为 '_' $modifiedData = strtr($modifiedData, '+/', '-_'); //将加密的参数发送给开放平台,获取短令牌 $urlOpen = commonOpenURL().'/Apis/getToken'; $encryption['information'] = $modifiedData; $token = curlPost($urlOpen,$encryption); $token = stdClassObjToArray(json_decode($token)); //推送消息至websocket $dataRequest['user'] = $user; $num = $i + 1; $dataRequest['name'] = $name; $dataRequest['rule'] = $rulename[$j]['ruletype'].$rulename[$j]['ruledetail']; $dataRequest['doc'] = $docName; $dataRequest['token'] = $token['token']; $dataRequest['ruleid'] = $rulename[$j]['ruleid']; $dataRequest['typename'] = $docsArray[$i]['TYPE_NAME']; $tokenrole['rulescore'] = $rulename[$j]['rulescore']; $tokenrole['token'] = $token['token']; $tokenrole['ruleid'] = $rulename[$j]['ruleid']; $tokenrole['typename'] = $docsArray[$i]['TYPE_NAME']; $tokenrole['content'] = $dataFinal; $tokenrole['ruletype'] = $rulename[$j]['ruletype']; $tokenrole['keywords'] = $rulename[$j]['keywords']; if($rulename[$j]['ruletype'] != null or $rulename[$j]['ruletype'] !='暂无'){ $tokenrole['ruledetail'] = ''.$rulename[$j]['ruledetail']; } $tokenrole['time'] = time(); db('tokenrole') -> insert($tokenrole); // dump($tokenrole); // exit; $url = commonURL().'/Send/websocket'; curlPost($url,$dataRequest); } } sleep(1); } return 'success'; } //全文质控 public function hisOpenPushMedical1(){ $user = request() -> param('user'); $docsCode = request() -> param('docsCode'); // $docsCode = "6a7a5edec3027e1990912c7cf98350b0"; $ragId = request() -> param('ragId'); $mapclient['user'] = array('eq',$user); $messageQueue = db('client') -> where($mapclient) -> value('messageQueue'); $strate = db('client') -> where($mapclient) -> value('strate'); if($messageQueue != 0){ return; } if($messageQueue != 0 && $strate == 0){ return; } $ragId ="1970054015201382402"; // $ragId ="1970054015201382rqqww402"; $mapToken['token'] = array('eq',$docsCode); $docsJson = db('token') -> where($mapToken) -> value('info'); $dataIntel = db('token') -> where($mapToken) -> value('intel'); $dataIntel = json_decode($dataIntel); $dataIntel = stdClassObjToArray($dataIntel); $tokenrole['pat_name'] = $dataIntel['pat_name']; $tokenrole['out_num'] = $dataIntel['out_num']; $tokenrole['in_num'] = $dataIntel['in_num']; $tokenrole['id_num'] = $dataIntel['id_num']; // return $docsJson; if(!$docsJson){ return json('客户端短令牌错误!'); } $docsArray = json_decode($docsJson); $docsArray = stdClassObjToArray($docsArray); // dump($docsJson); // exit; //通过病历列表获取病历原文 for($i = 0; $i < count($docsArray); $i++){ $name = substr($docsArray[$i]['TYPE_NAME'],0,strpos($docsArray[$i]['TYPE_NAME'], '-')); $docName = substr($docsArray[$i]['TYPE_NAME'],strripos($docsArray[$i]['TYPE_NAME'],"-")+1); //请求病历原文 $mrId = $docsArray[$i]["MR_ID"]; $dataMrId['mrId'] = $mrId; $urlMrId = commonDataURL().'/His/getMedicalRec'; $recs = curlPost($urlMrId,$dataMrId); $recs = json_decode($recs); $recs = stdClassObjToArray($recs); $keshi = $recs[count($recs)-1]['mr_text']; $tokenrole['DEPT_NAME'] = $keshi; $dataFinal = $recs[0]; $recs[count($recs)]['mr_title'] = '标题'; $recs[count($recs)-1]['mr_text'] = $docName; if($ragId!=null){ $dataRag['input'] = $docName; $dataRag['kid'] = $ragId; // dump($docName); $urlRAG = 'http://192.168.10.115:3338/apis/ragData'; $ragResult = curlPost($urlRAG,$dataRag); $ragResult = json_decode($ragResult); $ragResult = stdClassObjToArray($ragResult); if(array_key_exists('code', $ragResult)){ } else{ if($ragResult["nearest"]!=null){ // dump($ragResult); $rulesArray = preg_split('/\s*(?=规则编号:)/', $ragResult["nearest"][0]["text"], -1, PREG_SPLIT_NO_EMPTY); // dump($rulesArray); // exit; // 去除每个规则文本前后的空白字符 $rulesArray = array_map('trim', $rulesArray); for($j=1;$j isset($matches[1]) ? trim($matches[1]) : '', 'ruletype' => isset($matches[2]) ? trim($matches[2]) : '', 'ruledetail' => isset($matches[3]) ? trim($matches[3]) : '', 'rulescore' => isset($matches[4]) ? floatval(trim($matches[4])) : 0.0 ]; $dataFinalcount ="你是一名专业的医疗病历质控员,请根据以下内容严格按照质控规则进行病历质控审查。下面是一份".$docName."病历,当前病历原文为:\n".$dataFinal."\n请按照这个规则: ".$rulesArray[$j].") 为我判断当前病历原文是否正确,严格按照质控规则进行质控,禁止增添质控规则外的内容。如果正确,请返回:'【规则名称】: (对应的规则详情,不是规则编号)\n【质控结果】:病例校验通过。';如果不正确,请返回: '【规则名称】:(对应的规则名称或者规则详情) \n【质控结果】:病例校验不通过\n【不通过原因】:(简要概述不通过的原因)',严格按照上述回复格式回复,禁止添加解释、总结、问候语或额外说明,禁止添加其他内容解释,禁止输出()内的内容。"; // dump($dataFinalcount); // exit; //请求websocket客户端发送数据 $recContentFinal = [ [ 'role' => 'user', 'content' => $dataFinalcount ], ]; //组装请求的数据为base64格式 $data = []; $data['model'] = 'gstcm-G1-14B'; $data['network'] = '2'; $data['input'] = $recContentFinal; $data = json_encode($data,JSON_UNESCAPED_UNICODE); $data = base64_encode($data); //对请求的参数进行sm4加密 $smIV = getSMIV(); $config = [ 'mode' => 'cbc', 'key' => 'kdOVYNCDa50ZaKQF', // 16 字节二进制密钥 'iv' => $smIV, // 16 字节二进制 IV 'hash' => false ]; $sm4 = new EvitSM4Encryption($config); $encryptedBinary = $sm4->encrypt($data); // 将二进制结果转换为 Base64 $encryptedBase64 = base64_encode($encryptedBinary); //创建最终的含有sm4的iv的数据 $modifiedData = []; $modifiedData['encryptedBase64'] = $encryptedBase64; $modifiedData['smIV'] = $smIV; $modifiedData['publicKey'] = '6c5McfXGHnB0lmX2ir4sRvx6YBXlgxew'; $modifiedData = json_encode($modifiedData,JSON_UNESCAPED_UNICODE); $modifiedData = base64_encode($modifiedData); // 将 '+' 替换为 '-','/' 替换为 '_' $modifiedData = strtr($modifiedData, '+/', '-_'); //将加密的参数发送给开放平台,获取短令牌 $urlOpen = commonOpenURL().'/Apis/getToken'; $encryption['information'] = $modifiedData; $token = curlPost($urlOpen,$encryption); $token = stdClassObjToArray(json_decode($token)); //推送消息至websocket $dataRequest['user'] = $user; $num = $i + 1; $dataRequest['name'] = $name; $dataRequest['rule'] = $ruleData['ruletype'].$ruleData['ruledetail']; $dataRequest['doc'] = $docName; $dataRequest['token'] = $token['token']; $dataRequest['ruleid'] = $ruleData['ruleid']; $dataRequest['typename'] = $docsArray[$i]['TYPE_NAME']; $tokenrole['rulescore'] = $ruleData['rulescore'];//规则扣分 $tokenrole['token'] = $token['token']; $tokenrole['ruleid'] = $ruleData['ruleid']; //规则ID $tokenrole['typename'] = $docsArray[$i]['TYPE_NAME']; $tokenrole['content'] = $dataFinal; $tokenrole['ruletype'] = $ruleData['ruletype'];//规则类型 $tokenrole['keywords'] = ""; $tokenrole['ruledetail'] = ''.$ruleData['ruledetail'];//规则详情 $tokenrole['time'] = time(); db('tokenrole') -> insert($tokenrole); $url = commonURL().'/Send/websocket'; curlPost($url,$dataRequest); } } } } $mapName['emr'] = array('eq', $docName); $rulename = db('rulecounter')->where($mapName)->value('rulepath'); if($rulename != null){ $maprule['rulepath'] = array('like', '%'.$rulename.'%'); $ruleIdArray = array('RYJLXBS0013', 'RYJLXBS0012','RYJL0002', 'RYJLXX0001', 'RYJLZS0000', 'RYJLZS0001', 'RYJLZS0002', 'RYJLZS0003', 'RYJLZS0004', 'RYJLZS0005', 'RYJLXBS0000', 'RYJLXBS0001', 'RYJLXBS0002', 'RYJLXBS0003', 'RYJLXBS0004', 'RYJLXBS0005', 'RYJLXBS0006', 'RYJLXBS0007', 'RYJLXBS0008', 'RYJLXBS0009', 'RYJLXBS0010', 'RYJLXBS0011', 'RYJLJWS0000', 'RYJLJWS0001', 'RYJLJWS0002', 'RYJLJWS0003', 'RYJLJWS0004', 'RYJLJWS0005', 'RYJLJWS0006', 'RYJLJWS0007', 'RYJLJWS0009', 'RYJLJWS0010', 'RYJLJWS0011', 'RYJLGRS0000', 'RYJLHY0002', 'RYJLJZS0000', 'RYJLJZS0001', 'RYJLTGJC0000', 'RYJLTGJC0001', 'RYJLTGJC0002', 'RYJLTGJC0003', 'RYJLTGJC0004', 'RYJLTGJC0005', 'RYJLTGJC0006', 'RYJLTGJC0007', 'RYJLTGJC0008', 'RYJLZKJC0000', 'RYJLZKJC0001', 'RYJLFZJC0000', 'RYJLFZJC0001', 'RYJLFZJC0002', 'RYJLFZJC0003', 'RYJLFZJC0004', 'RYJLFZJC0007', 'RYJLFZJC0008', 'RYJLCBZD0000', 'RYJLCBZD0001', 'SCBC0000', 'SCBC0001', 'SCBC0003', 'SCBC0004', 'SCBC0005', 'RCBC0001', 'RCBC0003', 'RCBC0007', 'RCBC0011', 'RCBC0015', 'RCBC0019', 'RCBC0024', 'RCBC0025', 'RCBC0026', 'RCBC0027', 'RCBC0038', 'RCBC0039', 'RCBC0044', 'CYJL0008', 'CYJL0009', 'CYJL0011', 'CYJL0012', 'HZJL0000', 'HZJL0001', 'HZJL0002', 'HZJL0003', 'HZJL0005', 'SQXJ0000', 'SQXJ0001', 'RCBC0040', 'RCBC0041', 'SCBC0002', 'SWJL0007', 'CYJL0013', 'ZQTY0012', 'ZQTY0013', 'RYJLXBS0014'); $maprule['ruleid'] = array('in', $ruleIdArray); $rulename = db('rulefinal')->where($maprule)->select(); $rulename = stdClassObjToArray($rulename); for($j=0;$jwhere($mapmultirule)->select(); $multirule = stdClassObjToArray($multirule); $docNamepath=""; for($g = 0; $g < count($multirule); $g++){ $docNamepath.=$multirule[$g]["medicalreport"]."、"; } $multipleCases=""; for($q = 0; $q < count($multirule); $q++){ for($g = 0; $g < count($docsArray); $g++){ if(strpos($docsArray[$g]['TYPE_NAME'], $multirule[$q]["medicalreport"]) !== false){ $dataMrId['mrId'] = $docsArray[$g]['MR_ID']; $urlMrId = commonDataURL().'/His/getMedicalRec'; $recs = curlPost($urlMrId,$dataMrId); $recs = json_decode($recs); $recs = stdClassObjToArray($recs); $multipleCases.=$recs[0]."\n".$recs[1]["mr_title"].":".$recs[1]["mr_text"]; } } } $dataFinalcount ="你是一名专业的医疗病历质控员,请根据以下内容严格按照质控规则进行病历质控审查。下面是".$docNamepath."这几份病历,病历原文为:\n".$dataFinal."\n请按照这个规则: ".$rulename[$j]['ruletype'].$rulename[$j]['ruledetail']."(" .$rulename[$j]['ruleread'].") 为我判断当前病历原文是否正确,是否符合规则,严格按照质控规则进行质控,禁止增添质控规则外的内容。如果正确,请返回:'【规则名称】: ".$rulename[$j]['ruletype'].$rulename[$j]['ruledetail']."\n【质控结果】:病例校验通过。';如果不正确,请返回: '【规则名称】: ".$rulename[$j]['ruletype'].$rulename[$j]['ruledetail']."\n【质控结果】:病例校验不通过\n【不通过原因】:(简要概述不通过的原因)',严格按照上述回复格式回复,禁止添加解释、总结、问候语或额外说明,禁止添加其他内容解释。"; //请求websocket客户端发送数据 $recContentFinal = [ [ 'role' => 'user', 'content' => $dataFinalcount ], ]; //组装请求的数据为base64格式 $data = []; $data['model'] = 'gstcm-G1-14B'; $data['network'] = '2'; $data['input'] = $recContentFinal; $data = json_encode($data,JSON_UNESCAPED_UNICODE); $data = base64_encode($data); //对请求的参数进行sm4加密 $smIV = getSMIV(); $config = [ 'mode' => 'cbc', 'key' => 'kdOVYNCDa50ZaKQF', // 16 字节二进制密钥 'iv' => $smIV, // 16 字节二进制 IV 'hash' => false ]; $sm4 = new EvitSM4Encryption($config); $encryptedBinary = $sm4->encrypt($data); // 将二进制结果转换为 Base64 $encryptedBase64 = base64_encode($encryptedBinary); //创建最终的含有sm4的iv的数据 $modifiedData = []; $modifiedData['encryptedBase64'] = $encryptedBase64; $modifiedData['smIV'] = $smIV; $modifiedData['publicKey'] = '6c5McfXGHnB0lmX2ir4sRvx6YBXlgxew'; $modifiedData = json_encode($modifiedData,JSON_UNESCAPED_UNICODE); $modifiedData = base64_encode($modifiedData); // 将 '+' 替换为 '-','/' 替换为 '_' $modifiedData = strtr($modifiedData, '+/', '-_'); //将加密的参数发送给开放平台,获取短令牌 $urlOpen = commonOpenURL().'/Apis/getToken'; $encryption['information'] = $modifiedData; $token = curlPost($urlOpen,$encryption); $token = stdClassObjToArray(json_decode($token)); //推送消息至websocket $dataRequest['user'] = $user; $dataRequest['name'] = $name; $dataRequest['rule'] = $rulename[$j]['ruletype'].$rulename[$j]['ruledetail']; $dataRequest['doc'] = $docName; $dataRequest['token'] = $token['token']; $dataRequest['ruleid'] = $rulename[$j]['ruleid']; $dataRequest['typename'] = $docsArray[$i]['TYPE_NAME']; $tokenrole['rulescore'] = $rulename[$j]['rulescore']; $tokenrole['token'] = $token['token']; $tokenrole['ruleid'] = $rulename[$j]['ruleid']; $tokenrole['typename'] = $docsArray[$i]['TYPE_NAME']; $tokenrole['content'] = $dataFinal; $tokenrole['ruletype'] = $rulename[$j]['ruletype']; $tokenrole['keywords'] = $rulename[$j]['keywords']; if($rulename[$j]['ruletype'] != null or $rulename[$j]['ruletype'] !='暂无'){ $tokenrole['ruledetail'] = ''.$rulename[$j]['ruledetail']; } $tokenrole['time'] = time(); db('tokenrole') -> insert($tokenrole); // // dump($tokenrole); // // exit; $url = commonURL().'/Send/websocket'; curlPost($url,$dataRequest); } } sleep(1); } return 'success'; } //测试样例 public function hisOpenPushMedical(){ $user = request() -> param('user'); $docsCode = request() -> param('docsCode'); $ragId = request() -> param('ragId'); $mapclient['user'] = array('eq',$user); $messageQueue = db('client') -> where($mapclient) -> value('messageQueue'); $strate = db('client') -> where($mapclient) -> value('strate'); if($messageQueue != 0){ return; } if($messageQueue != 0 && $strate == 0){ return; } $ragId ="1970054015201382402"; // $ragId ="1970054015201382rqqww402"; $mapToken['token'] = array('eq',$docsCode); $docsJson = db('token') -> where($mapToken) -> value('info'); $dataIntel = db('token') -> where($mapToken) -> value('intel'); $dataIntel = json_decode($dataIntel); $dataIntel = stdClassObjToArray($dataIntel); $tokenrole['pat_name'] = $dataIntel['pat_name']; $tokenrole['out_num'] = $dataIntel['out_num']; $tokenrole['in_num'] = $dataIntel['in_num']; $tokenrole['id_num'] = $dataIntel['id_num']; // return $docsJson; if(!$docsJson){ return json('客户端短令牌错误!'); } $docsArray = json_decode($docsJson); $docsArray = stdClassObjToArray($docsArray); // dump($docsJson); // exit; //通过病历列表获取病历原文 for($i = 0; $i < count($docsArray); $i++){ $name = substr($docsArray[$i]['TYPE_NAME'],0,strpos($docsArray[$i]['TYPE_NAME'], '-')); $docName = substr($docsArray[$i]['TYPE_NAME'],strripos($docsArray[$i]['TYPE_NAME'],"-")+1); //请求病历原文 $mrId = $docsArray[$i]["MR_ID"]; $dataMrId['mrId'] = $mrId; $urlMrId = commonDataURL().'/His/getMedicalRec'; $recs = curlPost($urlMrId,$dataMrId); $recs = json_decode($recs); $recs = stdClassObjToArray($recs); // dump($recs); // exit; $keshi = $recs[1]['mr_text']; $tokenrole['DEPT_NAME'] = $keshi; $dataFinal = $recs[0]; $recs[1]['mr_title'] = '标题'; $recs[1]['mr_text'] = $docName; if($ragId!=null){ $dataRag['input'] = $docName; $dataRag['kid'] = $ragId; // dump($docName); $urlRAG = 'http://192.168.10.115:3338/apis/ragData'; $ragResult = curlPost($urlRAG,$dataRag); $ragResult = json_decode($ragResult); $ragResult = stdClassObjToArray($ragResult); if(array_key_exists('code', $ragResult)){ } else{ if($ragResult["nearest"]!=null){ // dump($ragResult); $rulesArray = preg_split('/\s*(?=规则编号:)/', $ragResult["nearest"][0]["text"], -1, PREG_SPLIT_NO_EMPTY); // dump($rulesArray); // exit; // 去除每个规则文本前后的空白字符 $rulesArray = array_map('trim', $rulesArray); for($j=1;$j isset($matches[1]) ? trim($matches[1]) : '', 'ruletype' => isset($matches[2]) ? trim($matches[2]) : '', 'ruledetail' => isset($matches[3]) ? trim($matches[3]) : '', 'rulescore' => isset($matches[4]) ? floatval(trim($matches[4])) : 0.0 ]; $signers = $recs[2]; $signerNames = array(); foreach ($signers as $signer) { if (isset($signer['SIGNER'])) { $signerNames[] = $signer['SIGNER']; } } $signerIndex = 0; $newDataFinal = preg_replace_callback( '/(签名:)(\s*)/', function($matches) use (&$signerIndex, $signerNames) { // 如果超过数组长度,使用最后一个签名者 $name = ($signerIndex < count($signerNames)) ? $signerNames[$signerIndex] : end($signerNames); $signerIndex++; return $matches[1] . $name . $matches[2]; }, $dataFinal ); // $newDataFinal = preg_replace('/(签名:)(\s*)/', "签名:".$recs[2][0]["SIGNER"], $dataFinal); $dataFinalcount ="你是一名专业的医疗病历质控员,请根据以下内容严格按照质控规则进行病历质控审查。下面是一份".$docName."病历,当前病历原文为:\n".$newDataFinal."\n请按照这个规则: ".$rulesArray[$j].") 为我判断当前病历原文是否正确,严格按照质控规则进行质控,禁止增添质控规则外的内容。如果正确,请返回:'【规则名称】: (对应的规则详情,不是规则编号)\n【质控结果】:病例校验通过。';如果不正确,请返回: '【规则名称】:(对应的规则名称或者规则详情) \n【质控结果】:病例校验不通过\n【不通过原因】:(简要概述不通过的原因)',严格按照上述回复格式回复,禁止添加解释、总结、问候语或额外说明,禁止添加其他内容解释,禁止输出()内的内容,当质控签名时,只要有任何一个签名,就判断质控结果为通过。"; // dump($dataFinalcount); // exit; //请求websocket客户端发送数据 $recContentFinal = [ [ 'role' => 'user', 'content' => $dataFinalcount ], ]; //组装请求的数据为base64格式 $data = []; $data['model'] = 'gstcm-G1-14B'; $data['network'] = '2'; $data['input'] = $recContentFinal; $data = json_encode($data,JSON_UNESCAPED_UNICODE); $data = base64_encode($data); //对请求的参数进行sm4加密 $smIV = getSMIV(); $config = [ 'mode' => 'cbc', 'key' => 'kdOVYNCDa50ZaKQF', // 16 字节二进制密钥 'iv' => $smIV, // 16 字节二进制 IV 'hash' => false ]; $sm4 = new EvitSM4Encryption($config); $encryptedBinary = $sm4->encrypt($data); // 将二进制结果转换为 Base64 $encryptedBase64 = base64_encode($encryptedBinary); //创建最终的含有sm4的iv的数据 $modifiedData = []; $modifiedData['encryptedBase64'] = $encryptedBase64; $modifiedData['smIV'] = $smIV; $modifiedData['publicKey'] = '6c5McfXGHnB0lmX2ir4sRvx6YBXlgxew'; $modifiedData = json_encode($modifiedData,JSON_UNESCAPED_UNICODE); $modifiedData = base64_encode($modifiedData); // 将 '+' 替换为 '-','/' 替换为 '_' $modifiedData = strtr($modifiedData, '+/', '-_'); //将加密的参数发送给开放平台,获取短令牌 $urlOpen = commonOpenURL().'/Apis/getToken'; $encryption['information'] = $modifiedData; $token = curlPost($urlOpen,$encryption); $token = stdClassObjToArray(json_decode($token)); //推送消息至websocket $dataRequest['user'] = $user; $num = $i + 1; $dataRequest['name'] = $name; $dataRequest['rule'] = $ruleData['ruletype'].$ruleData['ruledetail']; $dataRequest['doc'] = $docName; $dataRequest['token'] = $token['token']; $dataRequest['ruleid'] = $ruleData['ruleid']; $dataRequest['typename'] = $docsArray[$i]['TYPE_NAME']; $tokenrole['rulescore'] = $ruleData['rulescore'];//规则扣分 $tokenrole['token'] = $token['token']; $tokenrole['ruleid'] = $ruleData['ruleid']; //规则ID $tokenrole['typename'] = $docsArray[$i]['TYPE_NAME']; $tokenrole['content'] = $dataFinal; $tokenrole['ruletype'] = $ruleData['ruletype'];//规则类型 $tokenrole['keywords'] = ""; $tokenrole['ruledetail'] = ''.$ruleData['ruledetail'];//规则详情 $tokenrole['time'] = time(); db('tokenrole') -> insert($tokenrole); $url = commonURL().'/Send/websocket'; curlPost($url,$dataRequest); } } } } $mapName['emr'] = array('eq', $docName); $rulename = db('rulecounter')->where($mapName)->value('rulepath'); if($rulename != null){ $maprule['rulepath'] = array('like', '%'.$rulename.'%'); $ruleIdArray = array('RYJLXBS0013', 'RYJLXBS0012','RYJL0002', 'RYJLXX0001', 'RYJLZS0000', 'RYJLZS0001', 'RYJLZS0002', 'RYJLZS0003', 'RYJLZS0004', 'RYJLZS0005', 'RYJLXBS0000', 'RYJLXBS0001', 'RYJLXBS0002', 'RYJLXBS0003', 'RYJLXBS0004', 'RYJLXBS0005', 'RYJLXBS0006', 'RYJLXBS0007', 'RYJLXBS0008', 'RYJLXBS0009', 'RYJLXBS0010', 'RYJLXBS0011', 'RYJLJWS0000', 'RYJLJWS0001', 'RYJLJWS0002', 'RYJLJWS0003', 'RYJLJWS0004', 'RYJLJWS0005', 'RYJLJWS0006', 'RYJLJWS0007', 'RYJLJWS0009', 'RYJLJWS0010', 'RYJLJWS0011', 'RYJLGRS0000', 'RYJLHY0002', 'RYJLJZS0000', 'RYJLJZS0001', 'RYJLTGJC0000', 'RYJLTGJC0001', 'RYJLTGJC0002', 'RYJLTGJC0003', 'RYJLTGJC0004', 'RYJLTGJC0005', 'RYJLTGJC0006', 'RYJLTGJC0007', 'RYJLTGJC0008', 'RYJLZKJC0000', 'RYJLZKJC0001', 'RYJLFZJC0000', 'RYJLFZJC0001', 'RYJLFZJC0002', 'RYJLFZJC0003', 'RYJLFZJC0004', 'RYJLFZJC0007', 'RYJLFZJC0008', 'RYJLCBZD0000', 'RYJLCBZD0001', 'SCBC0000', 'SCBC0001', 'SCBC0003', 'SCBC0004', 'SCBC0005', 'RCBC0001', 'RCBC0003', 'RCBC0007', 'RCBC0011', 'RCBC0015', 'RCBC0019', 'RCBC0024', 'RCBC0025', 'RCBC0026', 'RCBC0027', 'RCBC0038', 'RCBC0039', 'RCBC0044', 'CYJL0008', 'CYJL0009', 'CYJL0011', 'CYJL0012', 'HZJL0000', 'HZJL0001', 'HZJL0002', 'HZJL0003', 'HZJL0005', 'SQXJ0000', 'SQXJ0001', 'RCBC0040', 'RCBC0041', 'SCBC0002', 'SWJL0007', 'CYJL0013', 'ZQTY0012', 'ZQTY0013', 'RYJLXBS0014'); $maprule['ruleid'] = array('in', $ruleIdArray); $rulename = db('rulefinal')->where($maprule)->select(); $rulename = stdClassObjToArray($rulename); for($j=0;$jwhere($mapmultirule)->select(); $multirule = stdClassObjToArray($multirule); $docNamepath=""; for($g = 0; $g < count($multirule); $g++){ if($g>=1){ $docNamepath .= "、"; } $docNamepath.=$multirule[$g]["medicalreport"]; } $multipleCases=""; for($q = 0; $q < count($multirule); $q++){ for($g = 0; $g < count($docsArray); $g++){ if(strpos($docsArray[$g]['TYPE_NAME'], $multirule[$q]["medicalreport"]) !== false){ $dataMrId['mrId'] = $docsArray[$g]['MR_ID']; $urlMrId = commonDataURL().'/His/getMedicalRec'; $recs = curlPost($urlMrId,$dataMrId); $recs = json_decode($recs); $recs = stdClassObjToArray($recs); $multipleCases.=$recs[0]."\n".$recs[1]["mr_title"].":".$recs[1]["mr_text"]; } } } $signers = $recs[2]; $signerNames = array(); foreach ($signers as $signer) { if (isset($signer['SIGNER'])) { $signerNames[] = $signer['SIGNER']; } } $signerIndex = 0; $newMultipleCases = preg_replace_callback( '/(签名:)(\s*)/', function($matches) use (&$signerIndex, $signerNames) { // 如果超过数组长度,使用最后一个签名者 $name = ($signerIndex < count($signerNames)) ? $signerNames[$signerIndex] : end($signerNames); $signerIndex++; return $matches[1] . $name . $matches[2]; }, $multipleCases ); $dataFinalcount ="你是一名专业的医疗病历质控员,请根据以下内容严格按照质控规则进行病历质控审查。下面是一份".$docNamepath.",病历原文为:\n".$newMultipleCases."\n***请按照这个规则: ".$rulename[$j]['ruletype'].$rulename[$j]['ruledetail']."(" .$rulename[$j]['ruleread'].") 为我判断当前病历原文是否正确,是否符合规则,严格按照质控规则进行质控,禁止增添质控规则外的内容。***如果正确,请返回:'【规则名称】: ".$rulename[$j]['ruletype'].$rulename[$j]['ruledetail']."\n【质控结果】:病例校验通过。';如果不正确,请返回: '【规则名称】: ".$rulename[$j]['ruletype'].$rulename[$j]['ruledetail']."\n【质控结果】:病例校验不通过\n【不通过原因】:(简要概述不通过的原因)',***严格按照上述回复格式回复,禁止添加解释、总结、问候语或额外说明,禁止添加其他内容解释,禁止输出规则解释()内的内容。当质控签名时,只要有任何一个签名,就判断质控结果为通过。***"; //请求websocket客户端发送数据 $recContentFinal = [ [ 'role' => 'user', 'content' => $dataFinalcount ], ]; // dump($dataFinalcount); //组装请求的数据为base64格式 $data = []; $data['model'] = 'gstcm-G1-14B'; $data['network'] = '2'; $data['input'] = $recContentFinal; $data = json_encode($data,JSON_UNESCAPED_UNICODE); $data = base64_encode($data); //对请求的参数进行sm4加密 $smIV = getSMIV(); $config = [ 'mode' => 'cbc', 'key' => 'kdOVYNCDa50ZaKQF', // 16 字节二进制密钥 'iv' => $smIV, // 16 字节二进制 IV 'hash' => false ]; $sm4 = new EvitSM4Encryption($config); $encryptedBinary = $sm4->encrypt($data); // 将二进制结果转换为 Base64 $encryptedBase64 = base64_encode($encryptedBinary); //创建最终的含有sm4的iv的数据 $modifiedData = []; $modifiedData['encryptedBase64'] = $encryptedBase64; $modifiedData['smIV'] = $smIV; $modifiedData['publicKey'] = '6c5McfXGHnB0lmX2ir4sRvx6YBXlgxew'; $modifiedData = json_encode($modifiedData,JSON_UNESCAPED_UNICODE); $modifiedData = base64_encode($modifiedData); // 将 '+' 替换为 '-','/' 替换为 '_' $modifiedData = strtr($modifiedData, '+/', '-_'); //将加密的参数发送给开放平台,获取短令牌 $urlOpen = commonOpenURL().'/Apis/getToken'; $encryption['information'] = $modifiedData; $token = curlPost($urlOpen,$encryption); $token = stdClassObjToArray(json_decode($token)); //推送消息至websocket $dataRequest['user'] = $user; $dataRequest['name'] = $name; $dataRequest['rule'] = $rulename[$j]['ruletype'].$rulename[$j]['ruledetail']; $dataRequest['doc'] = $docName; $dataRequest['token'] = $token['token']; $dataRequest['ruleid'] = $rulename[$j]['ruleid']; $dataRequest['typename'] = $docsArray[$i]['TYPE_NAME']; $tokenrole['rulescore'] = $rulename[$j]['rulescore']; $tokenrole['token'] = $token['token']; $tokenrole['ruleid'] = $rulename[$j]['ruleid']; $tokenrole['typename'] = $docsArray[$i]['TYPE_NAME']; $tokenrole['content'] = $dataFinal; $tokenrole['ruletype'] = $rulename[$j]['ruletype']; $tokenrole['keywords'] = $rulename[$j]['keywords']; if($rulename[$j]['ruletype'] != null or $rulename[$j]['ruletype'] !='暂无'){ $tokenrole['ruledetail'] = ''.$rulename[$j]['ruledetail']; } $tokenrole['time'] = time(); db('tokenrole') -> insert($tokenrole); // dump($tokenrole); // exit; $url = commonURL().'/Send/websocket'; curlPost($url,$dataRequest); } // exit; } sleep(1); } return 'success'; } //测试样例 public function hisOpenPushMedical2(){ $user = request() -> param('user'); $docsCode = request() -> param('docsCode'); $ragId = request() -> param('ragId'); $docsCode = "ac8dc63487dfa20ab5c0005603100c0b"; $mapclient['user'] = array('eq',$user); $messageQueue = db('client') -> where($mapclient) -> value('messageQueue'); $strate = db('client') -> where($mapclient) -> value('strate'); if($messageQueue != 0){ return; } if($messageQueue != 0 && $strate == 0){ return; } $ragId ="1970054015201382402"; // $ragId ="1970054015201382rqqww402"; $mapToken['token'] = array('eq',$docsCode); $docsJson = db('token') -> where($mapToken) -> value('info'); $dataIntel = db('token') -> where($mapToken) -> value('intel'); $dataIntel = json_decode($dataIntel); $dataIntel = stdClassObjToArray($dataIntel); $tokenrole['pat_name'] = $dataIntel['pat_name']; $tokenrole['out_num'] = $dataIntel['out_num']; $tokenrole['in_num'] = $dataIntel['in_num']; $tokenrole['id_num'] = $dataIntel['id_num']; // return $docsJson; if(!$docsJson){ return json('客户端短令牌错误!'); } $docsArray = json_decode($docsJson); $docsArray = stdClassObjToArray($docsArray); // dump($docsJson); // exit; //通过病历列表获取病历原文 for($i = 0; $i < count($docsArray); $i++){ $name = substr($docsArray[$i]['TYPE_NAME'],0,strpos($docsArray[$i]['TYPE_NAME'], '-')); $docName = substr($docsArray[$i]['TYPE_NAME'],strripos($docsArray[$i]['TYPE_NAME'],"-")+1); //请求病历原文 $mrId = $docsArray[$i]["MR_ID"]; $dataMrId['mrId'] = $mrId; $urlMrId = commonDataURL().'/His/getMedicalRec'; $recs = curlPost($urlMrId,$dataMrId); $recs = json_decode($recs); $recs = stdClassObjToArray($recs); // dump($recs); // exit; $keshi = $recs[1]['mr_text']; $tokenrole['DEPT_NAME'] = $keshi; $dataFinal = $recs[0]; if($recs[2] == 1){ $dataname = "\n质控规则包含括号内的内容(无签字,无医师签字)时,质控结果必须通过。"; } else{ $dataname = ""; } $recs[1]['mr_title'] = '标题'; $recs[1]['mr_text'] = $docName; if($ragId!=null){ $dataRag['input'] = $docName; $dataRag['kid'] = $ragId; // dump($docName); $urlRAG = 'http://192.168.10.115:3338/apis/ragData'; $ragResult = curlPost($urlRAG,$dataRag); $ragResult = json_decode($ragResult); $ragResult = stdClassObjToArray($ragResult); if(array_key_exists('code', $ragResult)){ } else{ if($ragResult["nearest"]!=null){ // dump($ragResult); $rulesArray = preg_split('/\s*(?=规则编号:)/', $ragResult["nearest"][0]["text"], -1, PREG_SPLIT_NO_EMPTY); // dump($rulesArray); // exit; // 去除每个规则文本前后的空白字符 $rulesArray = array_map('trim', $rulesArray); for($j=1;$j isset($matches[1]) ? trim($matches[1]) : '', 'ruletype' => isset($matches[2]) ? trim($matches[2]) : '', 'ruledetail' => isset($matches[3]) ? trim($matches[3]) : '', 'rulescore' => isset($matches[4]) ? floatval(trim($matches[4])) : 0.0 ]; $signers = $recs[2]; $signerNames = array(); foreach ($signers as $signer) { if (isset($signer['SIGNER'])) { $signerNames[] = $signer['SIGNER']; } } $signerIndex = 0; $newDataFinal = preg_replace_callback( '/(签名:)(\s*)/', function($matches) use (&$signerIndex, $signerNames) { // 如果超过数组长度,使用最后一个签名者 $name = ($signerIndex < count($signerNames)) ? $signerNames[$signerIndex] : end($signerNames); $signerIndex++; return $matches[1] . $name . $matches[2]; }, $dataFinal ); // $newDataFinal = preg_replace('/(签名:)(\s*)/', "签名:".$recs[2][0]["SIGNER"], $dataFinal); $dataFinalcount ="你是一名专业的医疗病历质控员,请根据以下内容严格按照质控规则进行病历质控审查。下面是一份".$docName."病历,当前病历原文为:\n".$newDataFinal."\n请按照这个规则: ".$rulesArray[$j].") 为我判断当前病历原文是否正确,严格按照质控规则进行质控,禁止增添质控规则外的内容。如果正确,请返回:'【规则名称】: (对应的规则详情,不是规则编号)\n【质控结果】:病例校验通过。';如果不正确,请返回: '【规则名称】:(对应的规则名称或者规则详情) \n【质控结果】:病例校验不通过\n【不通过原因】:(简要概述不通过的原因)',严格按照上述回复格式回复,禁止添加解释、总结、问候语或额外说明,禁止添加其他内容解释,禁止输出()内的内容,当质控签名时,只要有任何一个签名,就判断质控结果为通过。"; // dump($dataFinalcount); // exit; //请求websocket客户端发送数据 $recContentFinal = [ [ 'role' => 'user', 'content' => $dataFinalcount ], ]; //组装请求的数据为base64格式 $data = []; $data['model'] = 'gstcm-G1-14B'; $data['network'] = '2'; $data['input'] = $recContentFinal; $data = json_encode($data,JSON_UNESCAPED_UNICODE); $data = base64_encode($data); //对请求的参数进行sm4加密 $smIV = getSMIV(); $config = [ 'mode' => 'cbc', 'key' => 'kdOVYNCDa50ZaKQF', // 16 字节二进制密钥 'iv' => $smIV, // 16 字节二进制 IV 'hash' => false ]; $sm4 = new EvitSM4Encryption($config); $encryptedBinary = $sm4->encrypt($data); // 将二进制结果转换为 Base64 $encryptedBase64 = base64_encode($encryptedBinary); //创建最终的含有sm4的iv的数据 $modifiedData = []; $modifiedData['encryptedBase64'] = $encryptedBase64; $modifiedData['smIV'] = $smIV; $modifiedData['publicKey'] = '6c5McfXGHnB0lmX2ir4sRvx6YBXlgxew'; $modifiedData = json_encode($modifiedData,JSON_UNESCAPED_UNICODE); $modifiedData = base64_encode($modifiedData); // 将 '+' 替换为 '-','/' 替换为 '_' $modifiedData = strtr($modifiedData, '+/', '-_'); //将加密的参数发送给开放平台,获取短令牌 $urlOpen = commonOpenURL().'/Apis/getToken'; $encryption['information'] = $modifiedData; $token = curlPost($urlOpen,$encryption); $token = stdClassObjToArray(json_decode($token)); //推送消息至websocket $dataRequest['user'] = $user; $num = $i + 1; $dataRequest['name'] = $name; $dataRequest['rule'] = $ruleData['ruletype'].$ruleData['ruledetail']; $dataRequest['doc'] = $docName; $dataRequest['token'] = $token['token']; $dataRequest['ruleid'] = $ruleData['ruleid']; $dataRequest['typename'] = $docsArray[$i]['TYPE_NAME']; $tokenrole['rulescore'] = $ruleData['rulescore'];//规则扣分 $tokenrole['token'] = $token['token']; $tokenrole['ruleid'] = $ruleData['ruleid']; //规则ID $tokenrole['typename'] = $docsArray[$i]['TYPE_NAME']; $tokenrole['content'] = $dataFinal; $tokenrole['ruletype'] = $ruleData['ruletype'];//规则类型 $tokenrole['keywords'] = ""; $tokenrole['ruledetail'] = ''.$ruleData['ruledetail'];//规则详情 // $tokenrole['time'] = time(); // db('tokenrole') -> insert($tokenrole); // $url = commonURL().'/Send/websocket'; // curlPost($url,$dataRequest); } } } } $mapName['emr'] = array('eq', $docName); $rulename = db('rulecounter')->where($mapName)->value('rulepath'); if($rulename != null){ $maprule['rulepath'] = array('like', '%'.$rulename.'%'); $ruleIdArray = array('RYJLXBS0013', 'RYJLXBS0012','RYJL0002', 'RYJLXX0001', 'RYJLZS0000', 'RYJLZS0001', 'RYJLZS0002', 'RYJLZS0003', 'RYJLZS0004', 'RYJLZS0005', 'RYJLXBS0000', 'RYJLXBS0001', 'RYJLXBS0002', 'RYJLXBS0003', 'RYJLXBS0004', 'RYJLXBS0005', 'RYJLXBS0006', 'RYJLXBS0007', 'RYJLXBS0008', 'RYJLXBS0009', 'RYJLXBS0010', 'RYJLXBS0011', 'RYJLJWS0000', 'RYJLJWS0001', 'RYJLJWS0002', 'RYJLJWS0003', 'RYJLJWS0004', 'RYJLJWS0005', 'RYJLJWS0006', 'RYJLJWS0007', 'RYJLJWS0009', 'RYJLJWS0010', 'RYJLJWS0011', 'RYJLGRS0000', 'RYJLHY0002', 'RYJLJZS0000', 'RYJLJZS0001', 'RYJLTGJC0000', 'RYJLTGJC0001', 'RYJLTGJC0002', 'RYJLTGJC0003', 'RYJLTGJC0004', 'RYJLTGJC0005', 'RYJLTGJC0006', 'RYJLTGJC0007', 'RYJLTGJC0008', 'RYJLZKJC0000', 'RYJLZKJC0001', 'RYJLFZJC0000', 'RYJLFZJC0001', 'RYJLFZJC0002', 'RYJLFZJC0003', 'RYJLFZJC0004', 'RYJLFZJC0007', 'RYJLFZJC0008', 'RYJLCBZD0000', 'RYJLCBZD0001', 'SCBC0000', 'SCBC0001', 'SCBC0003', 'SCBC0004', 'SCBC0005', 'RCBC0001', 'RCBC0003', 'RCBC0007', 'RCBC0011', 'RCBC0015', 'RCBC0019', 'RCBC0024', 'RCBC0025', 'RCBC0026', 'RCBC0027', 'RCBC0038', 'RCBC0039', 'RCBC0044', 'CYJL0008', 'CYJL0009', 'CYJL0011', 'CYJL0012', 'HZJL0000', 'HZJL0001', 'HZJL0002', 'HZJL0003', 'HZJL0005', 'SQXJ0000', 'SQXJ0001', 'RCBC0040', 'RCBC0041', 'SCBC0002', 'SWJL0007', 'CYJL0013', 'ZQTY0012', 'ZQTY0013', 'RYJLXBS0014'); $maprule['ruleid'] = array('in', $ruleIdArray); $rulename = db('rulefinal')->where($maprule)->select(); $rulename = stdClassObjToArray($rulename); for($j=0;$jwhere($mapmultirule)->select(); $multirule = stdClassObjToArray($multirule); $docNamepath=""; for($g = 0; $g < count($multirule); $g++){ if($g>=1){ $docNamepath .= "、"; } $docNamepath.=$multirule[$g]["medicalreport"]; } $multipleCases=""; for($q = 0; $q < count($multirule); $q++){ for($g = 0; $g < count($docsArray); $g++){ if(strpos($docsArray[$g]['TYPE_NAME'], $multirule[$q]["medicalreport"]) !== false){ $dataMrId['mrId'] = $docsArray[$g]['MR_ID']; $urlMrId = commonDataURL().'/His/getMedicalRec'; $recs = curlPost($urlMrId,$dataMrId); $recs = json_decode($recs); $recs = stdClassObjToArray($recs); $multipleCases.=$recs[0]."\n".$recs[1]["mr_title"].":".$recs[1]["mr_text"]; if($recs[2] == 1){ $datanameCases = "\n医师签名与上级医师签名都默认存在。"; } else{ $datanameCases= ""; } } } } $signers = $recs[2]; $signerNames = array(); foreach ($signers as $signer) { if (isset($signer['SIGNER'])) { $signerNames[] = $signer['SIGNER']; } } $signerIndex = 0; $newMultipleCases = preg_replace_callback( '/(签名:)(\s*)/', function($matches) use (&$signerIndex, $signerNames) { // 如果超过数组长度,使用最后一个签名者 $name = ($signerIndex < count($signerNames)) ? $signerNames[$signerIndex] : end($signerNames); $signerIndex++; return $matches[1] . $name . $matches[2]; }, $multipleCases ); $dataFinalcount ="你是一名专业的医疗病历质控员,请根据以下内容严格按照质控规则进行病历质控审查。下面是一份".$docNamepath.",病历原文为:\n".$newMultipleCases."\n请按照这个规则: ".$rulename[$j]['ruletype'].$rulename[$j]['ruledetail']."(" .$rulename[$j]['ruleread'].") 为我判断当前病历原文是否正确,是否符合规则,严格按照质控规则进行质控,禁止增添质控规则外的内容。如果正确,请返回:'【规则名称】: ".$rulename[$j]['ruletype'].$rulename[$j]['ruledetail']."\n【质控结果】:病例校验通过。';如果不正确,请返回: '【规则名称】: ".$rulename[$j]['ruletype'].$rulename[$j]['ruledetail']."\n【质控结果】:病例校验不通过\n【不通过原因】:(简要概述不通过的原因)',严格按照上述回复格式回复,禁止添加解释、总结、问候语或额外说明,禁止添加其他内容解释,禁止输出()内的内容,当质控签名时,只要有任何一个签名,就判断质控结果为通过。"; //请求websocket客户端发送数据 $recContentFinal = [ [ 'role' => 'user', 'content' => $dataFinalcount ], ]; dump($dataFinalcount); exit; //组装请求的数据为base64格式 $data = []; $data['model'] = 'gstcm-G1-14B'; $data['network'] = '2'; $data['input'] = $recContentFinal; $data = json_encode($data,JSON_UNESCAPED_UNICODE); $data = base64_encode($data); //对请求的参数进行sm4加密 $smIV = getSMIV(); $config = [ 'mode' => 'cbc', 'key' => 'kdOVYNCDa50ZaKQF', // 16 字节二进制密钥 'iv' => $smIV, // 16 字节二进制 IV 'hash' => false ]; $sm4 = new EvitSM4Encryption($config); $encryptedBinary = $sm4->encrypt($data); // 将二进制结果转换为 Base64 $encryptedBase64 = base64_encode($encryptedBinary); //创建最终的含有sm4的iv的数据 $modifiedData = []; $modifiedData['encryptedBase64'] = $encryptedBase64; $modifiedData['smIV'] = $smIV; $modifiedData['publicKey'] = '6c5McfXGHnB0lmX2ir4sRvx6YBXlgxew'; $modifiedData = json_encode($modifiedData,JSON_UNESCAPED_UNICODE); $modifiedData = base64_encode($modifiedData); // 将 '+' 替换为 '-','/' 替换为 '_' $modifiedData = strtr($modifiedData, '+/', '-_'); //将加密的参数发送给开放平台,获取短令牌 $urlOpen = commonOpenURL().'/Apis/getToken'; $encryption['information'] = $modifiedData; $token = curlPost($urlOpen,$encryption); $token = stdClassObjToArray(json_decode($token)); //推送消息至websocket $dataRequest['user'] = $user; $dataRequest['name'] = $name; $dataRequest['rule'] = $rulename[$j]['ruletype'].$rulename[$j]['ruledetail']; $dataRequest['doc'] = $docName; $dataRequest['token'] = $token['token']; $dataRequest['ruleid'] = $rulename[$j]['ruleid']; $dataRequest['typename'] = $docsArray[$i]['TYPE_NAME']; $tokenrole['rulescore'] = $rulename[$j]['rulescore']; $tokenrole['token'] = $token['token']; $tokenrole['ruleid'] = $rulename[$j]['ruleid']; $tokenrole['typename'] = $docsArray[$i]['TYPE_NAME']; $tokenrole['content'] = $multipleCases; $tokenrole['ruletype'] = $rulename[$j]['ruletype']; $tokenrole['keywords'] = $rulename[$j]['keywords']; if($rulename[$j]['ruletype'] != null or $rulename[$j]['ruletype'] !='暂无'){ $tokenrole['ruledetail'] = ''.$rulename[$j]['ruledetail']; } // $tokenrole['time'] = time(); // db('tokenrole') -> insert($tokenrole); // dump($tokenrole); // exit; // $url = commonURL().'/Send/websocket'; // curlPost($url,$dataRequest); } // exit; } sleep(1); } return 'success'; } //接受hisOpen发送过来的病历列表并推送 public function hisOpenPush1(){ // $docsJson = '[{"TYPE_NAME":"彭**-入院记录","MR_ID":"dbc9a263-7e41-43e3-be37-637a8ebac213"},{"TYPE_NAME":"彭**-首次病程记录","MR_ID":"3f2ea6c4-6d58-46b3-89e0-92b0266a0fd0"},{"TYPE_NAME":"彭**-中医特色专科病程记录","MR_ID":"c22d3c52-c538-455d-84ef-0c19ebc50e02"},{"TYPE_NAME":"彭**-会诊记录","MR_ID":"b9f795fa-dff5-4bca-81c5-86d67faa87ef"},{"TYPE_NAME":"彭**-主治医师首次查房记录","MR_ID":"5b013e76-ed60-4fd5-a6b2-6cec487fe05c"},{"TYPE_NAME":"彭**-科主任或具有副主任医师以上专业技术职务资格医师查房记录","MR_ID":"40358471-16b9-4a9e-ba93-344a562022bd"},{"TYPE_NAME":"彭**-日常病程记录","MR_ID":"0d14032c-8f00-4c61-b0f8-c4a6ebd0cf4c"},{"TYPE_NAME":"彭**-术前小结","MR_ID":"d52e01b1-48a5-421e-bbb6-d0a61c6079af"},{"TYPE_NAME":"彭**-术前讨论记录","MR_ID":"fafa4249-f0d5-4354-9907-f75c5195ceb1"},{"TYPE_NAME":"彭**-第一术者术前查房记录","MR_ID":"5d94412a-5622-4118-a948-6de7029267ca"},{"TYPE_NAME":"彭**-出院证明书","MR_ID":"58711e0c-23db-4f2f-9c3c-0f36b4f1e3bf"},{"TYPE_NAME":"彭**-术前讨论记录","MR_ID":"b9ea75de-564a-4c03-9946-e364dc7dbc70"},{"TYPE_NAME":"彭**-术后首次病程记录","MR_ID":"f3299242-8c1e-4f40-8283-51698ab6ab37"},{"TYPE_NAME":"彭**-主治医师日常查房记录","MR_ID":"9b3dfe6d-ce4b-43b5-8514-7ad0c5ba2a88"},{"TYPE_NAME":"彭**-出院记录","MR_ID":"4f434252-d7bd-40e4-ac51-be0c86e73dcd"},{"TYPE_NAME":"彭**-修正诊断","MR_ID":"1d5dbeca-e572-4963-81d2-8d1dd5a65a30"}]'; // $user = 8999; $user = request() -> param('user'); $docsCode = request() -> param('docsCode'); // $docsCode = "2fa0e00ffd00d6e92b04a24bbd6dac1d"; $mapToken['token'] = array('eq',$docsCode); // $docsJson = db('token') -> where($mapToken) -> value('info'); $dataIntel = db('token') -> where($mapToken) -> value('intel'); $dataIntel = json_decode($dataIntel); $dataIntel = stdClassObjToArray($dataIntel); $tokenrole['pat_name'] = $dataIntel['pat_name']; $tokenrole['out_num'] = $dataIntel['out_num']; $tokenrole['in_num'] = $dataIntel['in_num']; $tokenrole['id_num'] = $dataIntel['id_num']; if(!$docsJson){ return json('客户端短令牌错误!'); } $docsArray = json_decode($docsJson); $docsArray = stdClassObjToArray($docsArray); //通过病历列表获取病历原文 for($i = 0; $i < count($docsArray); $i++){ $name = substr($docsArray[$i]['TYPE_NAME'],0,strpos($docsArray[$i]['TYPE_NAME'], '-')); $docName = substr($docsArray[$i]['TYPE_NAME'],strripos($docsArray[$i]['TYPE_NAME'],"-")+1); //请求病历原文 $mrId = $docsArray[$i]["MR_ID"]; $dataMrId['mrId'] = $mrId; $urlMrId = commonDataURL().'/His/getRec'; $recs = curlPost($urlMrId,$dataMrId); $recs = json_decode($recs); $recs = stdClassObjToArray($recs); $keshi = $recs[count($recs)-1]['mr_text']; $tokenrole['DEPT_NAME'] = $keshi; $dataFinal = ''; for($r=0;$rwhere($map)->value('rulepath'); if($rulename != null){ $maprule['rulepath'] = array('like', '%'.$rulename.'%'); $ruleIdArray = array('RYJL0002', 'RYJLXX0001', 'RYJLZS0000', 'RYJLZS0001', 'RYJLZS0002', 'RYJLZS0003', 'RYJLZS0004', 'RYJLZS0005', 'RYJLXBS0000', 'RYJLXBS0001', 'RYJLXBS0002', 'RYJLXBS0003', 'RYJLXBS0004', 'RYJLXBS0005', 'RYJLXBS0006','RYJLXBS0008', 'RYJLXBS0009', 'RYJLXBS0010', 'RYJLXBS0011', 'RYJLJWS0000', 'RYJLJWS0001', 'RYJLJWS0002', 'RYJLJWS0003', 'RYJLJWS0004', 'RYJLJWS0005', 'RYJLJWS0006', 'RYJLJWS0007','RYJLJWS0010','RYJLGRS0000', 'RYJLHY0002', 'RYJLJZS0000', 'RYJLJZS0001', 'RYJLTGJC0000', 'RYJLTGJC0001', 'RYJLTGJC0002', 'RYJLTGJC0003', 'RYJLTGJC0004', 'RYJLTGJC0005', 'RYJLTGJC0006', 'RYJLTGJC0007', 'RYJLTGJC0008', 'RYJLZKJC0000', 'RYJLZKJC0001', 'RYJLFZJC0000', 'RYJLFZJC0001', 'RYJLFZJC0002', 'RYJLFZJC0003', 'RYJLFZJC0004', 'RYJLFZJC0007', 'RYJLFZJC0008', 'RYJLCBZD0000', 'RYJLCBZD0001', 'SCBC0000', 'SCBC0001', 'SCBC0003', 'SCBC0004', 'SCBC0005', 'RCBC0000', 'RCBC0001', 'RCBC0003', 'RCBC0007', 'RCBC0015', 'RCBC0019', 'RCBC0020', 'RCBC0022', 'RCBC0023', 'RCBC0024', 'RCBC0025', 'RCBC0026', 'RCBC0027', 'RCBC0038', 'RCBC0039', 'RCBC0044', 'CYJL0002', 'CYJL0003', 'CYJL0004', 'CYJL0005', 'CYJL0006', 'CYJL0007', 'CYJL0008', 'CYJL0009', 'CYJL0011', 'CYJL0012', 'HZJL0000', 'HZJL0001', 'HZJL0002', 'HZJL0003', 'HZJL0004', 'HZJL0005', 'SQXJ0000', 'SQXJ0001', 'RCBC0040', 'RCBC0041'); $maprule['ruleid'] = array('in', $ruleIdArray); $rulename = db('rulefinal')->where($maprule)->select(); // dump($rulename); // exit; //dump(count($rulename)); //exit; // //查询某一列数据 // $rule = db('User')->column('name'); $rule = ""; $ruleid = ""; for($j=0;$j 'user', 'content' => $dataFinalcount ], ]; // dump($recContentFinal); //组装请求的数据为base64格式 $data = []; $data['model'] = 'gstcm-G1-14B'; $data['network'] = '2'; $data['input'] = $recContentFinal; $data = json_encode($data,JSON_UNESCAPED_UNICODE); $data = base64_encode($data); //对请求的参数进行sm4加密 $smIV = getSMIV(); $config = [ 'mode' => 'cbc', 'key' => 'kdOVYNCDa50ZaKQF', // 16 字节二进制密钥 'iv' => $smIV, // 16 字节二进制 IV 'hash' => false ]; $sm4 = new EvitSM4Encryption($config); $encryptedBinary = $sm4->encrypt($data); // 将二进制结果转换为 Base64 $encryptedBase64 = base64_encode($encryptedBinary); //创建最终的含有sm4的iv的数据 $modifiedData = []; $modifiedData['encryptedBase64'] = $encryptedBase64; $modifiedData['smIV'] = $smIV; $modifiedData['publicKey'] = '6c5McfXGHnB0lmX2ir4sRvx6YBXlgxew'; $modifiedData = json_encode($modifiedData,JSON_UNESCAPED_UNICODE); $modifiedData = base64_encode($modifiedData); // 将 '+' 替换为 '-','/' 替换为 '_' $modifiedData = strtr($modifiedData, '+/', '-_'); //将加密的参数发送给开放平台,获取短令牌 $urlOpen = commonOpenURL().'/Apis/getToken'; $encryption['information'] = $modifiedData; $token = curlPost($urlOpen,$encryption); $token = stdClassObjToArray(json_decode($token)); //推送消息至websocket $dataRequest['user'] = $user; $num = $i + 1; $dataRequest['name'] = $name; $dataRequest['rule'] = $rule; $dataRequest['doc'] = $docName.'('.$num.'/'.count($docsArray).')'; $dataRequest['token'] = $token['token']; $dataRequest['ruleid'] = $ruleid; $dataRequest['typename'] = $docsArray[$i]['TYPE_NAME']; $tokenrole['token'] = $token['token']; $tokenrole['ruleid'] = $ruleid; $tokenrole['typename'] = $docsArray[$i]['TYPE_NAME']; $tokenrole['content'] = $dataFinal; $tokenrole['ruletype'] = $rule; $tokenrole['ruledetail'] = $rule; $tokenrole['time'] = time(); db('tokenrole') -> insert($tokenrole); $url = commonURL().'/Send/websocket'; curlPost($url,$dataRequest); } sleep(1); } return 'success'; } //定时更新当前状态。 public function onlineUpdate(){ $user = request() -> param('user'); $messageQueuelength = request() -> param('messageQueuelength'); $strate = request() -> param('strate'); // $user = 6666; $mapUser['user'] = array('eq',$user); $userData = db('client') -> where($mapUser) -> select(); if($userData == null){ $updateData["user"] = $user; $updateData["updatetime"] = time(); $updateData["strate"] = 1; $updateData["messageQueue"] =$messageQueuelength; $data = db('client') -> insert($updateData); return $data; } else{ $updateData["updatetime"] = time(); $updateData["strate"] = $strate; $updateData["messageQueue"] =$messageQueuelength; $data = db('client') -> where($mapUser) -> update($updateData); return $data; } } public function test(){ // $docsCode = "cf76da1345a1602c40e4583430363169"; // $mapToken['token'] = array('eq',$docsCode); // $docsJson = db('token') -> where($mapToken) -> value('info'); // $docsArray = json_decode($docsJson); // $docsArray = stdClassObjToArray($docsArray); // // $searchTerm[0] = "首次病程记录"; // $searchTerm = "入院记录"; // $maprule['rulepath'] = array('like', '%'.$searchTerm.'%'); // $ruleIdArray = array('RYJLXBS0014'); // $maprule['ruleid'] = array('in', $ruleIdArray); // $rulename = db('rulefinal')->where($maprule)->select(); // $rulepath = json_decode($rulename[0]["rulepath"]); // $rulepath = stdClassObjToArray($rulepath); // dump($rulepath[0]); // // exit; // for($j = 0; $j < count($rulepath[0]); $j++){ // for($i = 0; $i < count($docsArray); $i++){ // // dump($docsArray[$i]['TYPE_NAME']); // if(strpos($docsArray[$i]['TYPE_NAME'], $rulepath[0][$j]) !== false){ // // return ($docsArray[$i]['TYPE_NAME']); // $dataMrId['mrId'] = $docsArray[$i]['MR_ID']; // $urlMrId = commonDataURL().'/His/getMedicalRec'; // $recs = curlPost($urlMrId,$dataMrId); // $recs = json_decode($recs); // $recs = stdClassObjToArray($recs); // dump($recs); // } // } // } $docsJson = db('rulefinal') -> select(); for($i = 0; $i < count($docsJson); $i++){ $data["ruleid"] = $docsJson[$i]["ruleid"]; $data["medicalreport"] = $docsJson[$i]["rulepath"]; db('multirule') -> insert($data); } dump($data); } //测试样例新版 public function hisOpenPushMedical5(){ $user = request() -> param('user'); $docsCode = request() -> param('docsCode'); $ragId = request() -> param('ragId'); $mapclient['user'] = array('eq',$user); $messageQueue = db('client') -> where($mapclient) -> value('messageQueue'); $strate = db('client') -> where($mapclient) -> value('strate'); if($messageQueue != 0){ return; } if($messageQueue != 0 && $strate == 0){ return; } $ragId ="1970054015201382402"; // $ragId ="1970054015201382rqqww402"; // $docsCode = "4df3e9bd12b79a6e5c435b0f3883bee9"; $mapToken['token'] = array('eq',$docsCode); $docsJson = db('token') -> where($mapToken) -> value('info'); $dataIntel = db('token') -> where($mapToken) -> value('intel'); $dataIntel = json_decode($dataIntel); $dataIntel = stdClassObjToArray($dataIntel); $tokenrole['pat_name'] = $dataIntel['pat_name']; $tokenrole['out_num'] = $dataIntel['out_num']; $tokenrole['in_num'] = $dataIntel['in_num']; $tokenrole['id_num'] = $dataIntel['id_num']; // return $docsJson; if(!$docsJson){ return json('客户端短令牌错误!'); } $docsArray = json_decode($docsJson); $docsArray = stdClassObjToArray($docsArray); $mapping = [ "病案首页" => "0", "入院记录" => "1", "首次病程记录" => "2", "阶段小结" => "3", "日常病程记录" => "4", "上级医师查房记录" => "5", "会诊记录" => "6", "术前讨论" => "7", "麻醉记录" => "8", "有创操作记录" => "9", "术后病程记录" => "10", "检查检验记录" => "11", "护理记录" => "12", "评分表" => "13", "交接班记录" => "14", "抢救记录" => "15", "死亡记录" => "16", "出入转记录" => "17", ]; //通过病历列表获取病历原文 for($i = 0; $i < count($docsArray); $i++){ $name = substr($docsArray[$i]['TYPE_NAME'],0,strpos($docsArray[$i]['TYPE_NAME'], '-')); $docName = substr($docsArray[$i]['TYPE_NAME'],strripos($docsArray[$i]['TYPE_NAME'],"-")+1); //请求病历原文 $mrId = $docsArray[$i]["MR_ID"]; $dataMrId['mrId'] = $mrId; $urlMrId = commonDataURL().'/His/getMedicalRec'; $recs = curlPost($urlMrId,$dataMrId); $recs = json_decode($recs); $recs = stdClassObjToArray($recs); // dump($recs); // exit; $keshi = $recs[1]['mr_text']; $tokenrole['DEPT_NAME'] = $keshi; $dataFinal = $recs[0]; $recs[1]['mr_title'] = '标题'; $recs[1]['mr_text'] = $docName; // dump($docName); $mapName['emr'] = array('eq', $docName); $rulename = db('rulecounter')->where($mapName)->value('rulepath'); if($ragId!=null){ $dataRag['input'] = $docName; $dataRag['kid'] = $ragId; // dump($docName); $urlRAG = 'http://192.168.10.115:3338/apis/ragData'; $ragResult = curlPost($urlRAG,$dataRag); $ragResult = json_decode($ragResult); $ragResult = stdClassObjToArray($ragResult); if(array_key_exists('code', $ragResult)){ } else{ // if($ragResult["nearest"]!=null){ // // dump($ragResult); // $rulesArray = preg_split('/\s*(?=规则编号:)/', $ragResult["nearest"][0]["text"], -1, PREG_SPLIT_NO_EMPTY); // // dump($rulesArray); // // exit; // // 去除每个规则文本前后的空白字符 // $rulesArray = array_map('trim', $rulesArray); // for($j=1;$j isset($matches[1]) ? trim($matches[1]) : '', // 'ruletype' => isset($matches[2]) ? trim($matches[2]) : '', // 'ruledetail' => isset($matches[3]) ? trim($matches[3]) : '', // 'rulescore' => isset($matches[4]) ? floatval(trim($matches[4])) : 0.0 // ]; // $signers = $recs[2]; // $signerNames = array(); // foreach ($signers as $signer) { // if (isset($signer['SIGNER'])) { // $signerNames[] = $signer['SIGNER']; // } // } // $signerIndex = 0; // $newDataFinal = preg_replace_callback( // '/(签名:)(\s*)/', // function($matches) use (&$signerIndex, $signerNames) { // // 如果超过数组长度,使用最后一个签名者 // $name = ($signerIndex < count($signerNames)) // ? $signerNames[$signerIndex] // : end($signerNames); // $signerIndex++; // return $matches[1] . $name . $matches[2]; // }, // $dataFinal // ); // // $newDataFinal = preg_replace('/(签名:)(\s*)/', "签名:".$recs[2][0]["SIGNER"], $dataFinal); // $dataFinalcount ="你是一名专业的医疗病历质控员,请根据以下内容严格按照质控规则进行病历质控审查。下面是一份".$docName."病历,当前病历原文为:\n".$newDataFinal."\n请按照这个规则: ".$rulesArray[$j].") 为我判断当前病历原文是否正确,严格按照质控规则进行质控,禁止增添质控规则外的内容。如果正确,请返回:'【规则名称】: (对应的规则详情,不是规则编号)\n【质控结果】:病例校验通过。';如果不正确,请返回: '【规则名称】:(对应的规则名称或者规则详情) \n【质控结果】:病例校验不通过\n【不通过原因】:(简要概述不通过的原因)',严格按照上述回复格式回复,禁止添加解释、总结、问候语或额外说明,禁止添加其他内容解释,禁止输出()内的内容,当质控签名时,只要有任何一个签名,就判断质控结果为通过。"; // // dump($dataFinalcount); // // exit; // //请求websocket客户端发送数据 // $recContentFinal = [ // [ // 'role' => 'user', // 'content' => $dataFinalcount // ], // ]; // //组装请求的数据为base64格式 // $data = []; // $data['model'] = 'gstcm-G1-14B'; // $data['network'] = '2'; // $data['input'] = $recContentFinal; // $data = json_encode($data,JSON_UNESCAPED_UNICODE); // $data = base64_encode($data); // //对请求的参数进行sm4加密 // $smIV = getSMIV(); // $config = [ // 'mode' => 'cbc', // 'key' => 'kdOVYNCDa50ZaKQF', // 16 字节二进制密钥 // 'iv' => $smIV, // 16 字节二进制 IV // 'hash' => false // ]; // $sm4 = new EvitSM4Encryption($config); // $encryptedBinary = $sm4->encrypt($data); // // 将二进制结果转换为 Base64 // $encryptedBase64 = base64_encode($encryptedBinary); // //创建最终的含有sm4的iv的数据 // $modifiedData = []; // $modifiedData['encryptedBase64'] = $encryptedBase64; // $modifiedData['smIV'] = $smIV; // $modifiedData['publicKey'] = '6c5McfXGHnB0lmX2ir4sRvx6YBXlgxew'; // $modifiedData = json_encode($modifiedData,JSON_UNESCAPED_UNICODE); // $modifiedData = base64_encode($modifiedData); // // 将 '+' 替换为 '-','/' 替换为 '_' // $modifiedData = strtr($modifiedData, '+/', '-_'); // //将加密的参数发送给开放平台,获取短令牌 // $urlOpen = commonOpenURL().'/Apis/getToken'; // $encryption['information'] = $modifiedData; // $token = curlPost($urlOpen,$encryption); // $token = stdClassObjToArray(json_decode($token)); // //推送消息至websocket // $dataRequest['user'] = $user; // $num = $i + 1; // $dataRequest['name'] = $name; // $dataRequest['rule'] = $ruleData['ruletype'].$ruleData['ruledetail']; // $dataRequest['doc'] = $docName; // $dataRequest['token'] = $token['token']; // $dataRequest['ruleid'] = $ruleData['ruleid']; // $dataRequest['typename'] = $docsArray[$i]['TYPE_NAME']; // $tokenrole['rulescore'] = $ruleData['rulescore'];//规则扣分 // $tokenrole['token'] = $token['token']; // $tokenrole['ruleid'] = $ruleData['ruleid']; //规则ID // $tokenrole['typename'] = $docsArray[$i]['TYPE_NAME']; // $tokenrole['content'] = $dataFinal; // $tokenrole['ruletype'] = $ruleData['ruletype'];//规则类型 // $tokenrole['keywords'] = ""; // $tokenrole['ruledetail'] = ''.$ruleData['ruledetail'];//规则详情 // $tokenrole['time'] = time(); // db('tokenrole') -> insert($tokenrole); // $url = commonURL().'/Send/websocket'; // curlPost($url,$dataRequest); // } // } } } if($rulename != null){ // $mapqcStage['qc_type_list'] = array('like', '%'.$mapping[$rulename].'%'); // $mapqcStage['qc_behavior'] = array('eq', 'common'); // //质控阶段与病例类型筛选后的规则 // $qcruleStage = db('quality_control_rule_sz')->where($mapqcStage)->select(); // $qcruleStage = stdClassObjToArray($qcruleStage); // dump($qcruleStage); // exit; $qcrulelink = db('quality_control_rule_sz')->select(); $qcTypeList = []; if (array_key_exists($rulename, $mapping)) { //筛选质控病历类型所对应的参数。 for($z = 0; $z < count($qcrulelink) ; $z++){ // $qcrulelink[$i]; // dump($qcrulelink[$i]["qc_type_list"]); $TypeList = json_decode($qcrulelink[$z]["qc_type_list"]); // 检查qcType是否在TypeList中 if (is_array($TypeList) && in_array($mapping[$rulename], $TypeList)) { // 将对应的rule_code添加到qcTypeList数组中 $qcTypeList[] = $qcrulelink[$z]["rule_code"]; } } } $mapqcStage['rule_code'] = array('in', $qcTypeList); $mapqcStage['qc_behavior'] = array('eq', 'common'); $mapqcStage['qc_stage'] = array('eq', 'PostEvent'); //质控阶段与病例类型筛选后的规则 $qcruleStage = db('quality_control_rule_sz')->where($mapqcStage)->select(); // dump($qcruleStage); // exit; //规则适配的病例类型 // $qcTypeList = $qcruleStage[0]["qc_type_list"]; // $qcTypeList = json_decode($qcTypeList); // $qcTypeList = stdClassObjToArray($qcTypeList); $dataRag['medicalContent'] = $dataFinal; $dataRag['kid'] = 'Rule_Final'; for($j=0;$j 'user', 'content' => $dataFinalcount ], ]; // dump($dataFinalcount); //组装请求的数据为base64格式 $data = []; $data['model'] = 'gstcm-G1-14B'; $data['network'] = '2'; $data['input'] = $recContentFinal; $data = json_encode($data,JSON_UNESCAPED_UNICODE); $data = base64_encode($data); //对请求的参数进行sm4加密 $smIV = getSMIV(); $config = [ 'mode' => 'cbc', 'key' => 'kdOVYNCDa50ZaKQF', // 16 字节二进制密钥 'iv' => $smIV, // 16 字节二进制 IV 'hash' => false ]; $sm4 = new EvitSM4Encryption($config); $encryptedBinary = $sm4->encrypt($data); // 将二进制结果转换为 Base64 $encryptedBase64 = base64_encode($encryptedBinary); //创建最终的含有sm4的iv的数据 $modifiedData = []; $modifiedData['encryptedBase64'] = $encryptedBase64; $modifiedData['smIV'] = $smIV; $modifiedData['publicKey'] = '6c5McfXGHnB0lmX2ir4sRvx6YBXlgxew'; $modifiedData = json_encode($modifiedData,JSON_UNESCAPED_UNICODE); $modifiedData = base64_encode($modifiedData); // 将 '+' 替换为 '-','/' 替换为 '_' $modifiedData = strtr($modifiedData, '+/', '-_'); //将加密的参数发送给开放平台,获取短令牌 $urlOpen = commonOpenURL().'/Apis/getToken'; $encryption['information'] = $modifiedData; $token = curlPost($urlOpen,$encryption); $token = stdClassObjToArray(json_decode($token)); // dump($recContentFinal); // exit; //推送消息至websocket $dataRequest['user'] = $user; $dataRequest['name'] = $name; $dataRequest['rule'] = $qcruleStage[$j]['rule_content']; $dataRequest['doc'] = $docName; $dataRequest['token'] = $token['token']; $dataRequest['ruleid'] = $qcruleStage[$j]['rule_code']; $dataRequest['typename'] = $docsArray[$i]['TYPE_NAME']; $tokenrole['token'] = $token['token']; $tokenrole['ruleid'] = $qcruleStage[$j]['rule_code']; $tokenrole['typename'] = $docsArray[$i]['TYPE_NAME']; $tokenrole['content'] = $dataFinal; $tokenrole['time'] = time(); db('tokenrole2') -> insert($tokenrole); // dump($tokenrole); // exit; $url = commonURL().'/Send/websocket'; curlPost($url,$dataRequest); } } // // exit; //多病例融合 // $docNamepath=""; // for($g = 0; $g < count($multirule); $g++){ // if($g>=1){ // $docNamepath .= "、"; // } // $docNamepath.=$multirule[$g]["medicalreport"]; // } // $multipleCases=""; // for($q = 0; $q < count($multirule); $q++){ // for($g = 0; $g < count($docsArray); $g++){ // if(strpos($docsArray[$g]['TYPE_NAME'], $multirule[$q]["medicalreport"]) !== false){ // $dataMrId['mrId'] = $docsArray[$g]['MR_ID']; // $urlMrId = commonDataURL().'/His/getMedicalRec'; // $recs = curlPost($urlMrId,$dataMrId); // $recs = json_decode($recs); // $recs = stdClassObjToArray($recs); // $multipleCases.=$recs[0]."\n".$recs[1]["mr_title"].":".$recs[1]["mr_text"]; // } // } // } } // sleep(1); return 'success'; } private function getValueByLike($input, $mapping = null) { $mapping = $mapping ?: $this->mapping; foreach ($mapping as $key => $value) { if (strpos($input, $key) !== false) { return $value; } } return null; } }