| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368 |
- <?php
- namespace app\index\controller;
- use think\Request;
- use think\Db;
- //sm4
- use Evit\PhpGmCrypto\Encryption\EvitSM4Encryption;
- class His extends \think\Controller
- {
- //主页
- public function index(){
- //判断用户设备是否是移动端
- 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());
-
- $recContent = db('medical_rec') -> 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;$r<count($recs);$r++){
- $dataFinal = $dataFinal.$recs[$r]["mr_title"].":".$recs[$r]["mr_text"]."brbr";
- }
- $recs[count($recs)]['mr_title'] = '标题';
- $recs[count($recs)-1]['mr_text'] = $docName;
- // $dataFinal = json_encode($recs,JSON_UNESCAPED_UNICODE);
- $map['emr'] = array('eq', $docName);
- $rulename = db('rulecounter')->where($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<count($rulename);$j++){
- if($rulename[$j]['ruledetail'] == '暂无'){
- $rulename[$j]['ruledetail'] = '';
- }
-
- // $dataFinalcount = "你是一名专业的医疗病历质控员,请根据以下内容进行病历质控审查。\n";
- // $dataFinalcount .= "当前病历名称如下:\n{$docName}\n\n";
- // $dataFinalcount .= "当前病历原文如下:\n{$dataFinal}\n\n";
- // $dataFinalcount .= "质控规则如下:\n".$rulename[$j]['ruletype'].$rulename[$j]['ruledetail']."\n\n";
- // $dataFinalcount .= "请按照上述规则,判断当前病历是否符合质控要求。\n\n";
- // $dataFinalcount .= "如果病历完全符合所有规则,请严格输出以下内容:\n";
- // $dataFinalcount .= "
- // 【规则名称】质控的哪条规则
- // 【质控结果】病例校验通过。'\n\n";
- // $dataFinalcount .= "如果存在不符合规则的情况,请按以下格式逐条输出违规项,\n";
- // $dataFinalcount .= "不符合规则的列举格式如下,严格模仿以下结构输出:\n";
- // $dataFinalcount .= "【规则名称】列出违反了哪条规则\n\n";
- // $dataFinalcount .= "【质控结果】简要描述为什么违反了此条规则\n\n";
- // $dataFinalcount .= "\n\n注意事项:\n";
- // $dataFinalcount .= "1. 若有违规,按格式逐条列出,必须包含【规则名称】【质控结果】两个字段,最多只能输出一次。\n";
- // $dataFinalcount .= "2. 每个字段独占一行,使用【】标注字段名,后接内容,不加冒号或其他符号。\n";
- // $dataFinalcount .= "3. 禁止添加解释、总结、问候语或额外说明。\n";
- $dataFinalcount ="你是一名专业的医疗病历质控员,请根据以下内容严格按照质控规则进行病历质控审查。下面是一份".$docName."病历,当前病历原文为:\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【不通过原因】:(简要概述不通过的原因)\n【质控原文】:(规则质控的具体原文的标题【‘:’前的文字。】,例如(主诉),严格输出原文的标题,不要输出其他内容,不能有任何偏差,)',严格按照上述回复格式回复,禁止添加解释、总结、问候语或额外说明,禁止添加其他内容解释。";
- // exit;
- // dump($dataFinalcount.'-----------------------------------------------------');
- // exit;
- // $dataFinalcount = '我需要你扮演一位专业医疗病历质控员,现在要进行病历质控。下面是一份'.$docName.'病历,当前病历原文为:\n'.$dataFinal.'n请按照这个规则:\"'.$rule[$j]["ruletype"].$rule[$j]["ruledetail"].'\",为我判断当前病历原文是否正确。如果正确,请返回:\"病例校验结果:病例校验通过。\",详细分析质控过程并说明原因;如果不正确,请返回:\"病例校验结果:'.$rule[$j]['ruletype'].".".$rule[$j]['ruledetail'].'\",详细分析质控过程并说明原因。仅把返回结果放在</answer>和<answer>之间。"';
-
-
- //请求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<count($rulesArray);$j++){
-
- preg_match('/规则编号:(.*?)\s*规则详情:\s*(.*?)\s*规则描述:\s*(.*?)\s*扣分标准:\s*([\d.]+)/s', $rulesArray[$j], $matches);
-
- // 存储到数组中
- $ruleData = [
- 'ruleid' => 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;$j<count($rulename);$j++){
- if($rulename[$j]['ruledetail'] == '暂无'){
- $rulename[$j]['ruledetail'] = '';
- }
- $ruleId = $rulename[$j]['ruleid'];
-
-
- $mapmultirule['ruleid'] = array('eq', $ruleId);
- //$mapmultirule['ruleid'] = array('eq', "RYJLXBS0014");
- $multirule = db('multirule')->where($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<count($rulesArray);$j++){
-
- preg_match('/规则编号:(.*?)\s*规则详情:\s*(.*?)\s*规则描述:\s*(.*?)\s*扣分标准:\s*([\d.]+)/s', $rulesArray[$j], $matches);
-
- // 存储到数组中
- $ruleData = [
- 'ruleid' => 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;$j<count($rulename);$j++){
- if($rulename[$j]['ruledetail'] == '暂无'){
- $rulename[$j]['ruledetail'] = '';
- }
- $ruleId = $rulename[$j]['ruleid'];
-
-
- $mapmultirule['ruleid'] = array('eq', $ruleId);
- // $mapmultirule['ruleid'] = array('eq', "RYJLXBS0014");
- $multirule = db('multirule')->where($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<count($rulesArray);$j++){
-
- preg_match('/规则编号:(.*?)\s*规则详情:\s*(.*?)\s*规则描述:\s*(.*?)\s*扣分标准:\s*([\d.]+)/s', $rulesArray[$j], $matches);
-
- // 存储到数组中
- $ruleData = [
- 'ruleid' => 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;$j<count($rulename);$j++){
- if($rulename[$j]['ruledetail'] == '暂无'){
- $rulename[$j]['ruledetail'] = '';
- }
- $ruleId = $rulename[$j]['ruleid'];
-
-
- $mapmultirule['ruleid'] = array('eq', $ruleId);
- // $mapmultirule['ruleid'] = array('eq', "RYJLXBS0014");
- $multirule = db('multirule')->where($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;$r<count($recs);$r++){
- $dataFinal = $dataFinal.$recs[$r]["mr_title"].":".$recs[$r]["mr_text"];
- }
-
- $recs[count($recs)]['mr_title'] = '标题';
- $recs[count($recs)-1]['mr_text'] = $docName;
- // $dataFinal = json_encode($recs,JSON_UNESCAPED_UNICODE);
- $map['emr'] = array('eq', $docName);
- $rulename = db('rulecounter')->where($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<count($rulename);$j++){
- $rulenamecount = $j+1;
- if($rulenamecount == count($rulename)){
- $rulenamecount = $j;
- }
- if($rulename[$j]['ruledetail'] == '暂无'){
- $rulename[$j]['ruledetail'] = '';
- }
-
- if($j == 0){
- $rule .= $rulename[$j]['ruletype'];
- $rule .= $rulename[$j]['ruledetail']."\n";
- }
- else{
- if($rulename[$j-1]['ruletype'] == $rulename[$j]['ruletype']){
- $rule .= $rulename[$j]['ruledetail'].",";
- }
- else{
- $rule .= $rulename[$j]['ruletype'];
-
- if($rulename[$rulenamecount]['ruletype'] == $rulename[$j]['ruletype']){
- $rule .= $rulename[$j]['ruledetail'].",";
- }
- else{
- $rule .= $rulename[$j]['ruledetail']."\n";
- }
- }
- }
- $ruleid .= $rulename[$j]['ruleid'];
- }
- $dataFinalcount = "你是一名专业的医疗病历质控员,请根据以下内容进行病历质控审查。\n";
- $dataFinalcount .= "当前病历名称如下:\n{$docName}\n\n";
- $dataFinalcount .= "当前病历原文如下:\n{$dataFinal}\n\n";
- $dataFinalcount .= "质控规则如下:\n{$rule}\n\n";
- $dataFinalcount .= "请按照上述规则,判断当前病历是否符合质控要求。\n\n";
- $dataFinalcount .= "如果病历完全符合所有规则,请严格输出以下内容:\n";
- $dataFinalcount .= "规则内容和病历校验结果:病例校验通过\n\n";
- $dataFinalcount .= "如果存在不符合规则的情况,请按以下格式逐条输出违规项,必须以‘病历校验结果:’开头,\n";
- $dataFinalcount .= "不符合规则输出的格式如下\n";
- $dataFinalcount .= "【规则名称】列出违反了哪条规则\n\n";
- $dataFinalcount .= "【质控结果】简要描述为什么违反了此条规则\n\n";
- $dataFinalcount .= "不符合规则的列举格式如下,严格模仿以下结构输出:\n";
- $dataFinalcount .= "病历校验结果:\n";
-
- $dataFinalcount .= "【规则名称】缺入院记录(实习医师代写视为缺住院记录)\n\n";
- $dataFinalcount .= "【质控结果】入院记录必须由执业医师书写或审签,实习医师单独代写且无上级医师签名视为缺失。\n\n";
- $dataFinalcount .= "*****\n";
- $dataFinalcount .= "【规则名称】未在患者入院24小时内完成入院记录\n\n";
- $dataFinalcount .= "【质控结果】入院记录应在患者入院后24小时内完成,由经治医师或值班医师书写。\n\n";
-
- $dataFinalcount .= "\n\n注意事项:\n";
- $dataFinalcount .= "1. 若无任何违规,不违规本项规则,不得输出该规则。\n";
- $dataFinalcount .= "2. 若有违规,必须先输出‘病历校验结果:’,然后按规则逐条列出,每条规则包含【规则名称】【质控结果】两个字段。\n";
- $dataFinalcount .= "3. 每条不同的完整规则之间,必须添加一行分隔符:*****,最后一条规则结束时结尾不要添加任何字符、符号等\n";
- $dataFinalcount .= "4. 每个字段独占一行,使用【】标注字段名,后接内容,不加冒号或其他符号。\n";
- $dataFinalcount .= "5. 禁止添加解释、总结、问候语或额外说明。\n";
- $dataFinalcount .= "5. 规则内容必须严格来自知识库,不得自行编造或推测。\n\n";
-
- //请求websocket客户端发送数据
- $recContentFinal = [
- [
- 'role' => '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<count($rulesArray);$j++){
-
- // preg_match('/规则编号:(.*?)\s*规则详情:\s*(.*?)\s*规则描述:\s*(.*?)\s*扣分标准:\s*([\d.]+)/s', $rulesArray[$j], $matches);
-
- // // 存储到数组中
- // $ruleData = [
- // 'ruleid' => 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<count($qcruleStage);$j++){
- $ruleCode = $qcruleStage[$j]['rule_code'];
- $dataRag['ruleCode'] = $ruleCode;
-
- $urlRAG = 'http://192.168.10.115:3338/apis/ragDataMCQC';
- $ragResult = curlPost($urlRAG,$dataRag);
- $ragResult = json_decode($ragResult);
- $ragResult = stdClassObjToArray($ragResult);
-
- //医师签名
- $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];
- },
- $dataFinal
- );
- // dump($dataFinal);
- // dump($newMultipleCases);
- // exit;
- // $dataFinalcount ="你是一名专业的医疗病历质控员,请根据以下内容严格按照质控规则进行病历质控审查。下面是一份".$docNamepath.",病历原文为:\n".$newMultipleCases."\n***请按照这个规则: ".$qcruleStage[$j]['ruletype'].$qcruleStage[$j]['ruledetail']."(" .$qcruleStage[$j]['ruleread'].") 为我判断当前病历原文是否正确,是否符合规则,严格按照质控规则进行质控,禁止增添质控规则外的内容。***如果正确,请返回:'【规则名称】: ".$qcruleStage[$j]['ruletype'].$qcruleStage[$j]['ruledetail']."\n【质控结果】:病例校验通过。';如果不正确,请返回: '【规则名称】: ".$qcruleStage[$j]['ruletype'].$qcruleStage[$j]['ruledetail']."\n【质控结果】:病例校验不通过\n【不通过原因】:(简要概述不通过的原因)',***严格按照上述回复格式回复,禁止添加解释、总结、问候语或额外说明,禁止添加其他内容解释,禁止输出规则解释()内的内容。当质控签名时,只要有任何一个签名,就判断质控结果为通过。***";
- if(count($ragResult["data"]) != 0){
- //正确示例
- $PoExample = "";
- //错误示例
- $ErExample = "";
- for($Example = 0 ;$Example<count($ragResult["data"]);$Example++){
- if($ragResult["data"][$Example]["type"] == "positive"){
- $PoExample.=$ragResult["data"][$Example]["exampleContent"]."\n";
- }
- else{
- $ErExample.=$ragResult["data"][$Example]["exampleContent"]."\n";
- }
- }
- // dump($PoExample);
- // dump($ErExample);
-
- $dataFinalcount = "你是一名专业的医疗病历质控员,需要依据【质控规则】对病历内容进行审核。
- 若提供了【参考内容】,仅用于理解规则,不得直接引用或照抄。
- 请严格基于【病历原文】判断是否违反该规则。
- ***【质控规则】***
- 规则编码: ".$qcruleStage[$j]["rule_code"]."\n
- 规则内容: ".$qcruleStage[$j]["rule_content"]."\n
- 规则解释: ".$qcruleStage[$j]["rule_desc"]."\n
- ***【参考内容】***
- 正例(符合要求的写法):\n
- ".$PoExample."\n
- 反例(不符合要求的写法):\n
- ".$ErExample."\n
- ===【病历原文】===
- 以下为".$docName."部分:
- \n".$newMultipleCases."\n
- ===【输出要求】===
- 请严格以下列格式输出,不得输出解释性文字或额外内容。
-
- 如果病历完全符合规则,请输出以下格式的内容:
- 【规则名称】: ".$qcruleStage[$j]['rule_content']."\n
- 【质控结果】:病例校验通过。
-
- 如果存在不符合规则,请输出以下格式的内容:
- 【规则名称】: ".$qcruleStage[$j]['rule_content']."\n
- 【质控结果】:病例校验不通过\n
- 【不通过原因】:(简要概述不通过的原因)
- 【规则关键字】:违规位置及所属内容(必须只有一个关键字,如 ‘主诉’)',
-
- ===【注意事项】===
- - 严禁输出 Markdown 代码块(如 ```json)
- - 严禁输出解释性文字、分析过程或无关说明
- - 不得引用或复述【参考内容】中的文字
- - 若规则不适用于当前病历内容,应视为通过
- - 所有结论必须严格基于【病历原文】内容
- -【不通过原因】的内容,禁止出现任何姓名信息,例如医师姓名,签名,人名,如果必须出现姓名,以’**‘这种方式来代替。
- ";
-
-
- }
- else{
- $dataFinalcount = "你是一名专业的医疗病历质控员,需要依据【质控规则】对病历内容进行审核。
- 若提供了【参考内容】,仅用于理解规则,不得直接引用或照抄。
- 请严格基于【病历原文】判断是否违反该规则。
- ***【质控规则】***
- 规则编码: ".$qcruleStage[$j]["rule_code"]."\n
- 规则内容: ".$qcruleStage[$j]["rule_content"]."\n
- 规则解释: ".$qcruleStage[$j]["rule_desc"]."\n
- ===【病历原文】===
- 以下为".$docName."部分:
- \n".$newMultipleCases."\n
- ===【输出要求】===
- 请严格以下列格式输出,不得输出解释性文字或额外内容。
-
- 如果病历完全符合规则,请输出以下格式的内容:
- 【规则名称】: ".$qcruleStage[$j]['rule_content']."\n
- 【质控结果】:病例校验通过。
-
- 如果存在不符合规则,请输出以下格式的内容:
- 【规则名称】: ".$qcruleStage[$j]['rule_content']."\n
- 【质控结果】:病例校验不通过\n
- 【不通过原因】:(简要概述不通过的原因)\n
- 【规则关键字】:违规位置及内容(必须只有一个关键字,如 ‘主诉’)'
- ===【注意事项】===
- - 严禁输出 Markdown 代码块(如 ```json)
- - 严禁输出解释性文字、分析过程或无关说明
- - 若规则不适用于当前病历内容,应视为通过
- - 所有结论必须严格基于【病历原文】内容
- -【不通过原因】的内容,禁止出现任何姓名信息,例如医师姓名,签名,人名,如果必须出现姓名,以’**‘这种方式来代替。
- ";
- }
- // dump($dataFinalcount);
- // exit;
-
- //请求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));
-
- // 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;
- }
- }
|