Hi11s.php 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553
  1. <?php
  2. namespace app\index\controller;
  3. use think\Request;
  4. use think\Db;
  5. //sm4
  6. use Evit\PhpGmCrypto\Encryption\EvitSM4Encryption;
  7. class His extends \think\Controller
  8. {
  9. //主页
  10. public function index(){
  11. //判断用户设备是否是移动端
  12. if(isMobile() == true){
  13. $device = 'phone';
  14. }
  15. else{
  16. $device = 'pc';
  17. }
  18. //获取当前年份
  19. $year = date('Y',time());
  20. //获取公共路径
  21. $commonURL = commonURL();
  22. //获取公共路径
  23. $commonOpenURL = commonOpenURL();
  24. //获取当前时间
  25. $now = date('Y-m-d H:i:s',time());
  26. $recContent = db('medical_rec') -> limit(205) -> field('content',true) -> select();
  27. for($i = 0; $i < count($recContent); $i++){
  28. $mapPat['pat_visit_info_id'] = array('eq',$recContent[$i]['pat_visit_info_id']);
  29. $name = db('pat_visit_info') -> where($mapPat) -> value('pat_name');
  30. $patId = db('pat_visit_info') -> where($mapPat) -> value('pat_id');
  31. $pageId = db('pat_visit_info') -> where($mapPat) -> value('page_id');
  32. $recContent[$i]['name'] = mb_substr($name, 0, 1, 'UTF-8') . '**';
  33. $recContent[$i]['pat_id'] = $patId;
  34. $recContent[$i]['page_id'] = $pageId;
  35. }
  36. $user = request() -> param('user');
  37. //构造请求数据
  38. return view('index', [
  39. 'recContent' => $recContent,
  40. 'device' => $device,
  41. 'year' => $year,
  42. 'commonURL' => $commonURL,
  43. 'now' => $now,
  44. 'commonOpenURL' => $commonOpenURL,
  45. 'user' => $user,
  46. ]);
  47. }
  48. //整合最终的参数并发起请求
  49. public function wsRequest(){
  50. $user = request() -> param('user');
  51. $patId = request() -> param('patId');
  52. $pageId = request() -> param('pageId');
  53. $doc = request() -> param('doc');
  54. //查询病历唯一标识
  55. $mapPat['pat_id'] = array('eq',$patId);
  56. $mapPat['page_id'] = array('eq',$pageId);
  57. $patVisitId = db('pat_visit_info') -> where($mapPat) -> value('pat_visit_info_id');
  58. $name = db('pat_visit_info') -> where($mapPat) -> value('pat_name');
  59. //查询对应的病历原始文本
  60. $mapRec['pat_visit_info_id'] = array('eq',$patVisitId);
  61. $mapRec['type_name'] = array('eq',$doc);
  62. $recContent = db('medical_rec') -> where($mapRec) -> find();
  63. //自然文本质控
  64. $recContentInfo = '科室名称:'.$recContent['dept_name'].'。 诊疗文书原文:'.$recContent['content'];
  65. //json文本指控
  66. $mapRecContent['mr_id'] = array('eq',$recContent['mr_id']);
  67. $recContentJson = db('medical_rec_content') -> where($mapRecContent) -> select();
  68. foreach ($recContentJson as &$subarray) {
  69. // 移除 'id' 和 'mr_id' 键
  70. unset($subarray['id'], $subarray['mr_id']);
  71. }
  72. // 销毁引用以避免潜在问题
  73. unset($subarray);
  74. $dept['mr_title'] = '部门';
  75. $dept['mr_text'] = $recContent['dept_name'];
  76. $recContentJson[count($recContentJson)] = $dept;
  77. $recContentJson = json_encode($recContentJson,JSON_UNESCAPED_UNICODE);
  78. //最终输出
  79. $recContentFinal = [
  80. [
  81. 'role' => 'user',
  82. 'content' => $recContentJson
  83. ],
  84. ];
  85. //组装请求的数据为base64格式
  86. $data['model'] = 'emoon-E2-7B';
  87. $data['network'] = '1';
  88. $data['input'] = $recContentFinal;
  89. $data = json_encode($data,JSON_UNESCAPED_UNICODE);
  90. $data = base64_encode($data);
  91. //对请求的参数进行sm4加密
  92. $smIV = getSMIV();
  93. $config = [
  94. 'mode' => 'cbc',
  95. 'key' => 'iRMFdLrIrwV7xiep', // 16 字节二进制密钥
  96. 'iv' => $smIV, // 16 字节二进制 IV
  97. 'hash' => false
  98. ];
  99. $sm4 = new EvitSM4Encryption($config);
  100. $encryptedBinary = $sm4->encrypt($data);
  101. // 将二进制结果转换为 Base64
  102. $encryptedBase64 = base64_encode($encryptedBinary);
  103. //创建最终的含有sm4的iv的数据
  104. $modifiedData['encryptedBase64'] = $encryptedBase64;
  105. $modifiedData['smIV'] = $smIV;
  106. $modifiedData['publicKey'] = 'Vt8kKsWQqQhkTvhsdwIPYmcaZfPmCJp1';
  107. $modifiedData = json_encode($modifiedData,JSON_UNESCAPED_UNICODE);
  108. $modifiedData = base64_encode($modifiedData);
  109. // 将 '+' 替换为 '-','/' 替换为 '_'
  110. $modifiedData = strtr($modifiedData, '+/', '-_');
  111. //将加密的参数发送给开放平台,获取短令牌
  112. $urlOpen = commonOpenURL().'/Apis/getToken';
  113. $encryption['information'] = $modifiedData;
  114. $token = curlPost($urlOpen,$encryption);
  115. $token = stdClassObjToArray(json_decode($token));
  116. //构建最终的请求内容
  117. $dataRequest['user'] = $user;
  118. $dataRequest['name'] = mb_substr($name, 0, 1, 'UTF-8') . '**';
  119. $dataRequest['doc'] = $doc;
  120. $dataRequest['token'] = $token['token'];
  121. $url = commonURL().'/Send/websocket';
  122. curlPost($url,$dataRequest);
  123. return '已将该「病历原文」发送至「医梦AI客户端」';
  124. }
  125. //中联web AI质控接口地址
  126. public function httpRequest(){
  127. //获取输入的内容
  128. $json = file_get_contents('php://input');
  129. $data = json_decode($json, true);
  130. //{"messages":[ {"role":"user","content":"请问你是什么模型?"}]}
  131. $message = $data['messages'] ?? null;
  132. //组装请求的数据为base64格式
  133. $data['model'] = 'deepseek-R1-8B';
  134. $data['network'] = '2';
  135. $data['input'] = $message;
  136. $data = json_encode($data,JSON_UNESCAPED_UNICODE);
  137. $data = base64_encode($data);
  138. //对请求的参数进行sm4加密
  139. $smIV = getSMIV();
  140. $config = [
  141. 'mode' => 'cbc',
  142. 'key' => 'sYq9QbK6E1FI2Hi9', // 16 字节二进制密钥
  143. 'iv' => $smIV, // 16 字节二进制 IV
  144. 'hash' => false
  145. ];
  146. $sm4 = new EvitSM4Encryption($config);
  147. $encryptedBinary = $sm4->encrypt($data);
  148. // 将二进制结果转换为 Base64
  149. $encryptedBase64 = base64_encode($encryptedBinary);
  150. //创建最终的含有sm4的iv的数据
  151. $modifiedData['encryptedBase64'] = $encryptedBase64;
  152. $modifiedData['smIV'] = $smIV;
  153. $modifiedData['publicKey'] = 'l5zI6lwxHLcCQ8LfQRwpvLLNv2WjMbj2';
  154. $modifiedData = json_encode($modifiedData,JSON_UNESCAPED_UNICODE);
  155. $modifiedData = base64_encode($modifiedData);
  156. // 将 '+' 替换为 '-','/' 替换为 '_'
  157. $modifiedData = strtr($modifiedData, '+/', '-_');
  158. //将加密的参数发送给开放平台,获取短令牌
  159. $urlOpen = commonOpenURL().'/Apis/getToken';
  160. $encryption['information'] = $modifiedData;
  161. $token = curlPost($urlOpen,$encryption);
  162. $token = stdClassObjToArray(json_decode($token));
  163. //构建最终的请求内容
  164. $dataRequest['token'] = $token['token'];
  165. $url = commonOpenURLHTTP();
  166. $result = curlPost($url,$dataRequest);
  167. return $result;
  168. }
  169. //创建实时质控页面
  170. public function qualityNow(){
  171. //判断用户设备是否是移动端
  172. if(isMobile() == true){
  173. $device = 'phone';
  174. }
  175. else{
  176. $device = 'pc';
  177. }
  178. //获取当前年份
  179. $year = date('Y',time());
  180. //获取公共路径
  181. $commonURL = commonURL();
  182. //获取公共路径
  183. $commonOpenURL = commonOpenURL();
  184. //获取当前时间
  185. $now = date('Y-m-d H:i:s',time());
  186. $user = request() -> param('user');
  187. //构造请求数据
  188. return view('qualityNow', [
  189. 'device' => $device,
  190. 'year' => $year,
  191. 'commonURL' => $commonURL,
  192. 'now' => $now,
  193. 'commonOpenURL' => $commonOpenURL,
  194. 'user' => $user,
  195. ]);
  196. }
  197. //创建实时获取病历列表
  198. public function getDoc(){
  199. //$data['patId'] = '1220319';
  200. //$data['pageId'] = '1';
  201. // $data['patId'] = request() -> param('patId');
  202. // $data['pageId'] = request() -> param('pageId');
  203. $url = commonDataURL().'/His/getDoc';
  204. $result = curlPost($url,$data);
  205. return json($result);
  206. }
  207. //创建实时获取病历内容
  208. public function getRec(){
  209. //$data['mrId'] = '2d26e278-7028-4103-8ba8-1b4625473d35';
  210. $dataMrId['mrId'] = request() -> param('mrId');
  211. $urlMrId = commonDataURL().'/His/getRec';
  212. $result = curlPost($urlMrId,$dataMrId);
  213. //请求websocket客户端发送数据
  214. $recContentFinal = [
  215. [
  216. 'role' => 'user',
  217. 'content' => $result
  218. ],
  219. ];
  220. //组装请求的数据为base64格式
  221. $data['model'] = 'emoon-E2-7B';
  222. $data['network'] = '1';
  223. $data['input'] = $recContentFinal;
  224. $data = json_encode($data,JSON_UNESCAPED_UNICODE);
  225. $data = base64_encode($data);
  226. //对请求的参数进行sm4加密
  227. $smIV = getSMIV();
  228. $config = [
  229. 'mode' => 'cbc',
  230. 'key' => 'iRMFdLrIrwV7xiep', // 16 字节二进制密钥
  231. 'iv' => $smIV, // 16 字节二进制 IV
  232. 'hash' => false
  233. ];
  234. $sm4 = new EvitSM4Encryption($config);
  235. $encryptedBinary = $sm4->encrypt($data);
  236. // 将二进制结果转换为 Base64
  237. $encryptedBase64 = base64_encode($encryptedBinary);
  238. //创建最终的含有sm4的iv的数据
  239. $modifiedData['encryptedBase64'] = $encryptedBase64;
  240. $modifiedData['smIV'] = $smIV;
  241. $modifiedData['publicKey'] = 'Vt8kKsWQqQhkTvhsdwIPYmcaZfPmCJp1';
  242. $modifiedData = json_encode($modifiedData,JSON_UNESCAPED_UNICODE);
  243. $modifiedData = base64_encode($modifiedData);
  244. // 将 '+' 替换为 '-','/' 替换为 '_'
  245. $modifiedData = strtr($modifiedData, '+/', '-_');
  246. //将加密的参数发送给开放平台,获取短令牌
  247. $urlOpen = commonOpenURL().'/Apis/getToken';
  248. $encryption['information'] = $modifiedData;
  249. $token = curlPost($urlOpen,$encryption);
  250. $token = stdClassObjToArray(json_decode($token));
  251. //构建最终的请求内容
  252. $user = request() -> param('user');
  253. $typeName = request() -> param('typeName');
  254. $name = substr($typeName,0,strpos($typeName, '-'));
  255. $doc = substr($typeName,strripos($typeName,"-")+1);
  256. $dataRequest['user'] = $user;
  257. $dataRequest['name'] = $name;
  258. $dataRequest['doc'] = $doc;
  259. $dataRequest['token'] = $token['token'];
  260. $url = commonURL().'/Send/websocket';
  261. curlPost($url,$dataRequest);
  262. return '已将该「病历原文」发送至「医梦AI客户端」';
  263. }
  264. //his传入参数触发客户端质控
  265. public function hisOpen(){
  266. $user = request() -> param('user');
  267. $patId = request() -> param('patId');
  268. $pageId = request() -> param('pageId');
  269. //获取当前用户的病历列表
  270. $dataDoc['patId'] = $patId;
  271. $dataDoc['pageId'] = $pageId;
  272. $urlGetDoc = commonDataURL().'/His/getDoc';
  273. $docs = curlPost($urlGetDoc,$dataDoc);
  274. $docsArray = json_decode($docs);
  275. $docsArray = stdClassObjToArray($docsArray);
  276. $docsJson = json_encode($docsArray,JSON_UNESCAPED_UNICODE);
  277. //将令牌存储
  278. $tokenData['info'] = $docsJson;
  279. $tokenData['time'] = time();
  280. $docsJsonCut = substr($docsJson, 0, 20);
  281. $docsCode = md5($docsJsonCut.time().rand(10000,99999));
  282. $tokenData['token'] = $docsCode;
  283. $urlGetIntel = commonDataURL().'/His/getintel';
  284. $dataIntel = curlPost($urlGetIntel,$dataDoc);
  285. $dataIntel = json_decode($dataIntel);
  286. $dataIntel = stdClassObjToArray($dataIntel);
  287. $dataIntel = json_encode($dataIntel,JSON_UNESCAPED_UNICODE);
  288. $tokenData['intel'] = $dataIntel;
  289. db('token') -> insert($tokenData);
  290. $mapToken['token'] = array('eq',$docsCode);
  291. $docsJson = db('token') -> where($mapToken) -> value('info');
  292. //跳转chatbox
  293. $url = commonURL().'/Index/chatBox?user='.$user.'&docsCode='.$docsCode;
  294. $this -> redirect($url);
  295. }
  296. //接受hisOpen发送过来的病历列表并推送
  297. public function hisOpenPush(){
  298. // $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"}]';
  299. // $docsJson = '[{"TYPE_NAME":"尹**-入院记录","MR_ID":"99ae40eb-c107-4606-bd13-7ed8bf53e12f"},{"TYPE_NAME":"尹**-首次病程记录","MR_ID":"e4502986-1a81-4216-9e9d-1869d0f22f88"},{"TYPE_NAME":"尹**-主治医师首次查房记录","MR_ID":"ba3297c7-84d8-4514-8c25-29ce47cd089f"},{"TYPE_NAME":"尹**-科主任或具有副主任医师以上专业技术职务资格医师查房记录","MR_ID":"04329e53-7cbb-4732-b825-0ab491400835"},{"TYPE_NAME":"尹**-日常病程记录","MR_ID":"87e48c13-446a-405d-91c4-36a8cfc2d4d1"},{"TYPE_NAME":"尹**-中医特色专科病程记录","MR_ID":"c3b35ac8-1993-43c4-a807-c0278b5e5579"},{"TYPE_NAME":"尹**-补充诊断","MR_ID":"ff39882c-3fff-43e0-83dd-fba2c21e04a3"},{"TYPE_NAME":"尹**-修正诊断","MR_ID":"13623317-a32c-445c-a08e-fd54dde88c3a"},{"TYPE_NAME":"尹**-补充诊断","MR_ID":"2d79692a-b4b3-4173-9d6a-9bccef7d7fb6"},{"TYPE_NAME":"尹**-主治医师日常查房记录","MR_ID":"a0a5535a-0d43-48e9-a5a6-9b651165028f"},{"TYPE_NAME":"尹**-主治医师日常查房记录","MR_ID":"a4a1ece9-247e-41bb-bd75-c5f5032b535b"},{"TYPE_NAME":"尹**-主任医师日常查房记录","MR_ID":"4daacb44-1b37-4461-8619-8edf22443925"},{"TYPE_NAME":"尹**-日常病程记录","MR_ID":"6b1036d0-ef82-4beb-8a6c-d8110c41adc0"},{"TYPE_NAME":"尹**-日常病程记录","MR_ID":"1083a5b4-0a20-4bd1-9477-9b68b41b02f2"},{"TYPE_NAME":"尹**-出院证明书","MR_ID":"37a7b824-c0fe-4d59-952d-4efdfd6330e6"},{"TYPE_NAME":"尹**-主治医师日常查房记录","MR_ID":"b4183eee-0b94-40d9-8743-1ec3ddc88fbb"},{"TYPE_NAME":"尹**-出院记录","MR_ID":"19a426d0-d32a-48cb-a2e1-9205da11e4ee"}]';
  300. // $user = 8999;
  301. $user = request() -> param('user');
  302. $docsCode = request() -> param('docsCode');
  303. //$docsCode = "2fa0e00ffd00d6e92b04a24bbd6dac1d";
  304. $mapToken['token'] = array('eq',$docsCode);
  305. $docsJson = db('token') -> where($mapToken) -> value('info');
  306. $dataIntel = db('token') -> where($mapToken) -> value('intel');
  307. $dataIntel = json_decode($dataIntel);
  308. $dataIntel = stdClassObjToArray($dataIntel);
  309. $tokenrole['pat_name'] = $dataIntel['pat_name'];
  310. $tokenrole['out_num'] = $dataIntel['out_num'];
  311. $tokenrole['in_num'] = $dataIntel['in_num'];
  312. $tokenrole['id_num'] = $dataIntel['id_num'];
  313. // return $docsJson;
  314. if(!$docsJson){
  315. return json('客户端短令牌错误!');
  316. }
  317. $docsArray = json_decode($docsJson);
  318. $docsArray = stdClassObjToArray($docsArray);
  319. //通过病历列表获取病历原文
  320. for($i = 0; $i < count($docsArray); $i++){
  321. $name = substr($docsArray[$i]['TYPE_NAME'],0,strpos($docsArray[$i]['TYPE_NAME'], '-'));
  322. $docName = substr($docsArray[$i]['TYPE_NAME'],strripos($docsArray[$i]['TYPE_NAME'],"-")+1);
  323. //请求病历原文
  324. $mrId = $docsArray[$i]["MR_ID"];
  325. $dataMrId['mrId'] = $mrId;
  326. $urlMrId = commonDataURL().'/His/getRec';
  327. $recs = curlPost($urlMrId,$dataMrId);
  328. $recs = json_decode($recs);
  329. $recs = stdClassObjToArray($recs);
  330. $keshi = $recs[count($recs)-1]['mr_text'];
  331. $tokenrole['DEPT_NAME'] = $keshi;
  332. $dataFinal = '';
  333. for($r=0;$r<count($recs);$r++){
  334. $dataFinal = $dataFinal.$recs[$r]["mr_title"].":".$recs[$r]["mr_text"];
  335. }
  336. $recs[count($recs)]['mr_title'] = '标题';
  337. $recs[count($recs)-1]['mr_text'] = $docName;
  338. // $dataFinal = json_encode($recs,JSON_UNESCAPED_UNICODE);
  339. $map['emr'] = array('eq', $docName);
  340. $rulename = db('rulecounter')->where($map)->value('rulepath');
  341. if($rulename != null){
  342. $maprule['rulepath'] = array('like', '%'.$rulename.'%');
  343. $ruleIdArray = array('RYJL0001', 'RYJL0002', 'RYJL0003', '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', 'SCBC0002', 'SCBC0003', 'SCBC0004', 'SCBC0005', 'RCBC0000', 'RCBC0001', 'RCBC0003', 'RCBC0004', 'RCBC0006', 'RCBC0007', 'RCBC0011', 'RCBC0015', 'RCBC0019', 'RCBC0020', 'RCBC0022', 'RCBC0023', 'RCBC0024', 'RCBC0025', 'RCBC0026', 'RCBC0027', 'RCBC0028', 'RCBC0038', 'RCBC0039', 'RCBC0044', 'CYJL0002', 'CYJL0003', 'CYJL0004', 'CYJL0005', 'CYJL0006', 'CYJL0007', 'CYJL0008', 'CYJL0009', 'CYJL0011', 'CYJL0012', 'CYJL0013', 'HZJL0000', 'HZJL0001', 'HZJL0002', 'HZJL0003', 'HZJL0004', 'HZJL0005', 'SQXJ0000', 'SQXJ0001', 'RCBC0040', 'RCBC0041');
  344. $maprule['ruleid'] = array('in', $ruleIdArray);
  345. $rulename = db('rulefinal')->where($maprule)->select();
  346. //dump(count($rulename));
  347. //exit;
  348. // //查询某一列数据
  349. // $rule = db('User')->column('name');
  350. for($j=0;$j<count($rulename);$j++){
  351. if($rulename[$j]['ruledetail'] == '暂无'){
  352. $rulename[$j]['ruledetail'] = '';
  353. }
  354. $dataFinalcount ="我需要你扮演一位专业医疗病历质控员,现在要进行病历质控。下面是一份".$docName."病历,当前病历原文为:\n".$dataFinal."\n请按照这个规则: ".$rulename[$j]['ruletype'].$rulename[$j]['ruledetail']." 为我判断当前病历原文是否正确。如果正确,请返回:'病例校验结果:病例校验通过。',详细分析质控过程并说明原因;如果不正确,请返回: '病例校验结果:".$rulename[$j]['ruletype'].".".$rulename[$j]['ruledetail']."',详细分析质控过程并说明原因。仅把返回结果放在</answer>和<answer>之间。";
  355. // dump('-----------------------------------------------------');
  356. // exit;
  357. // $dataFinalcount = '我需要你扮演一位专业医疗病历质控员,现在要进行病历质控。下面是一份'.$docName.'病历,当前病历原文为:\n'.$dataFinal.'n请按照这个规则:\"'.$rule[$j]["ruletype"].$rule[$j]["ruledetail"].'\",为我判断当前病历原文是否正确。如果正确,请返回:\"病例校验结果:病例校验通过。\",详细分析质控过程并说明原因;如果不正确,请返回:\"病例校验结果:'.$rule[$j]['ruletype'].".".$rule[$j]['ruledetail'].'\",详细分析质控过程并说明原因。仅把返回结果放在</answer>和<answer>之间。"';
  358. // dump($dataFinalcount);
  359. //请求websocket客户端发送数据
  360. $recContentFinal = [
  361. [
  362. 'role' => 'user',
  363. 'content' => $dataFinalcount
  364. ],
  365. ];
  366. //组装请求的数据为base64格式
  367. $data = [];
  368. $data['model'] = 'gstcm-G1-14B';
  369. $data['network'] = '2';
  370. $data['input'] = $recContentFinal;
  371. $data = json_encode($data,JSON_UNESCAPED_UNICODE);
  372. $data = base64_encode($data);
  373. //对请求的参数进行sm4加密
  374. $smIV = getSMIV();
  375. $config = [
  376. 'mode' => 'cbc',
  377. 'key' => 'kdOVYNCDa50ZaKQF', // 16 字节二进制密钥
  378. 'iv' => $smIV, // 16 字节二进制 IV
  379. 'hash' => false
  380. ];
  381. $sm4 = new EvitSM4Encryption($config);
  382. $encryptedBinary = $sm4->encrypt($data);
  383. // 将二进制结果转换为 Base64
  384. $encryptedBase64 = base64_encode($encryptedBinary);
  385. //创建最终的含有sm4的iv的数据
  386. $modifiedData = [];
  387. $modifiedData['encryptedBase64'] = $encryptedBase64;
  388. $modifiedData['smIV'] = $smIV;
  389. $modifiedData['publicKey'] = '6c5McfXGHnB0lmX2ir4sRvx6YBXlgxew';
  390. $modifiedData = json_encode($modifiedData,JSON_UNESCAPED_UNICODE);
  391. $modifiedData = base64_encode($modifiedData);
  392. // 将 '+' 替换为 '-','/' 替换为 '_'
  393. $modifiedData = strtr($modifiedData, '+/', '-_');
  394. //将加密的参数发送给开放平台,获取短令牌
  395. $urlOpen = commonOpenURL().'/Apis/getToken';
  396. $encryption['information'] = $modifiedData;
  397. $token = curlPost($urlOpen,$encryption);
  398. $token = stdClassObjToArray(json_decode($token));
  399. //推送消息至websocket
  400. $dataRequest['user'] = $user;
  401. $num = $i + 1;
  402. $dataRequest['name'] = $name;
  403. $dataRequest['rule'] = $rulename[$j]['ruletype'].$rulename[$j]['ruledetail'];
  404. $dataRequest['doc'] = $docName.'('.$num.'/'.count($docsArray).')';
  405. $dataRequest['token'] = $token['token'];
  406. $dataRequest['ruleid'] = $rulename[$j]['ruleid'];
  407. $dataRequest['typename'] = $docsArray[$i]['TYPE_NAME'];
  408. $tokenrole['token'] = $token['token'];
  409. $tokenrole['ruleid'] = $rulename[$j]['ruleid'];
  410. $tokenrole['typename'] = $docsArray[$i]['TYPE_NAME'];
  411. $tokenrole['content'] = $dataFinal;
  412. $tokenrole['ruletype'] = $rulename[$j]['ruletype'];
  413. if($rulename[$j]['ruletype'] != null or $rulename[$j]['ruletype'] !='暂无'){
  414. $tokenrole['ruledetail'] = ''.$rulename[$j]['ruledetail'];
  415. }
  416. $tokenrole['time'] = time();
  417. db('tokenrole') -> insert($tokenrole);
  418. $url = commonURL().'/Send/websocket';
  419. curlPost($url,$dataRequest);
  420. }
  421. }
  422. sleep(1);
  423. }
  424. return 'success';
  425. }
  426. // public function hisOpenPush(){
  427. // $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"}]';
  428. // $user = 8999;
  429. // // $user = request() -> param('user');
  430. // // $docsCode = request() -> param('docsCode');
  431. // // $mapToken['token'] = array('eq',$docsCode);
  432. // // $docsJson = db('token') -> where($mapToken) -> value('info');
  433. // // if(!$docsJson){
  434. // // return json('客户端短令牌错误!');
  435. // // }
  436. // $docsArray = json_decode($docsJson);
  437. // $docsArray = stdClassObjToArray($docsArray);
  438. // //通过病历列表获取病历原文
  439. // for($i = 0; $i < count($docsArray); $i++){
  440. // $name = substr($docsArray[$i]['TYPE_NAME'],0,strpos($docsArray[$i]['TYPE_NAME'], '-'));
  441. // $docName = substr($docsArray[$i]['TYPE_NAME'],strripos($docsArray[$i]['TYPE_NAME'],"-")+1);
  442. // //请求病历原文
  443. // $mrId = $docsArray[$i]["MR_ID"];
  444. // $dataMrId['mrId'] = $mrId;
  445. // $urlMrId = commonDataURL().'/His/getRec';
  446. // $recs = curlPost($urlMrId,$dataMrId);
  447. // $recs = json_decode($recs);
  448. // $recs = stdClassObjToArray($recs);
  449. // $recs[count($recs)]['mr_title'] = '标题';
  450. // $recs[count($recs)-1]['mr_text'] = $docName;
  451. // $dataFinal = json_encode($recs,JSON_UNESCAPED_UNICODE);
  452. // //请求websocket客户端发送数据
  453. // $recContentFinal = [
  454. // [
  455. // 'role' => 'user',
  456. // 'content' => $dataFinal
  457. // ],
  458. // ];
  459. // //组装请求的数据为base64格式
  460. // $data = [];
  461. // $data['model'] = 'gstcm-G1-7B';
  462. // $data['network'] = '1';
  463. // $data['input'] = $recContentFinal;
  464. // $data = json_encode($data,JSON_UNESCAPED_UNICODE);
  465. // $data = base64_encode($data);
  466. // //对请求的参数进行sm4加密
  467. // $smIV = getSMIV();
  468. // $config = [
  469. // 'mode' => 'cbc',
  470. // 'key' => 'kdOVYNCDa50ZaKQF', // 16 字节二进制密钥
  471. // 'iv' => $smIV, // 16 字节二进制 IV
  472. // 'hash' => false
  473. // ];
  474. // $sm4 = new EvitSM4Encryption($config);
  475. // $encryptedBinary = $sm4->encrypt($data);
  476. // // 将二进制结果转换为 Base64
  477. // $encryptedBase64 = base64_encode($encryptedBinary);
  478. // //创建最终的含有sm4的iv的数据
  479. // $modifiedData = [];
  480. // $modifiedData['encryptedBase64'] = $encryptedBase64;
  481. // $modifiedData['smIV'] = $smIV;
  482. // $modifiedData['publicKey'] = '6c5McfXGHnB0lmX2ir4sRvx6YBXlgxew';
  483. // $modifiedData = json_encode($modifiedData,JSON_UNESCAPED_UNICODE);
  484. // $modifiedData = base64_encode($modifiedData);
  485. // // 将 '+' 替换为 '-','/' 替换为 '_'
  486. // $modifiedData = strtr($modifiedData, '+/', '-_');
  487. // //将加密的参数发送给开放平台,获取短令牌
  488. // $urlOpen = commonOpenURL().'/Apis/getToken';
  489. // $encryption['information'] = $modifiedData;
  490. // $token = curlPost($urlOpen,$encryption);
  491. // $token = stdClassObjToArray(json_decode($token));
  492. // //推送消息至websocket
  493. // $dataRequest['user'] = $user;
  494. // $num = $i + 1;
  495. // $dataRequest['name'] = $name;
  496. // $dataRequest['doc'] = $docName.'('.$num.'/'.count($docsArray).')';
  497. // $dataRequest['token'] = $token['token'];
  498. // $url = commonURL().'/Send/websocket';
  499. // curlPost($url,$dataRequest);
  500. // //sleep(1);
  501. // }
  502. // return 'success';
  503. // }
  504. }