Baidu.php 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829
  1. <?php
  2. namespace app\controller;
  3. use app\Request;
  4. //include './Sample.php';
  5. class Baidu extends CommonTwoController
  6. {
  7. public function ocr(Request $request)
  8. {
  9. $file = $request->file('file');
  10. if ($file->getSize() > (4 * 1024 * 1024)) {
  11. return $this->_json_error('文件大小超过限制');
  12. //$this->error(1, '文件大小超过限制');
  13. }
  14. $rtn = (new Sample())->run($file->getRealPath());
  15. $content = json_decode($rtn, true);
  16. $items = $content['words_result'];
  17. // var_dump($items);exit;
  18. $result = [];
  19. $serCodes = [];
  20. foreach ($items['Item'] as $key => $val) {
  21. //0参考区间
  22. //1单位
  23. //2参考区间
  24. //4 结果
  25. //6代号
  26. //7名称
  27. if (stripos($val[2]['word'], '--') !== false) {
  28. $fanwei = explode('--', $val[2]['word']);
  29. } else {
  30. $fanwei = explode('-', $val[2]['word']);
  31. }
  32. if (!isset($fanwei[1]) || in_array($val[7]['word'], ['超敏肌钙蛋白I'])) {
  33. continue;
  34. }
  35. if (stripos($val[7]['word'], ')') !== false) {
  36. preg_match('/\((.*?)\)/', $val[7]['word'], $matches);
  37. if (!isset($matches[1])) {
  38. continue;
  39. }
  40. $val[6]['word'] = $matches[1];
  41. }
  42. if (!empty($val[4]['word']) && !empty($val[7]['word']) && empty($val[6]['word'])) {
  43. $val[6]['word'] = $this->getCode($val[7]['word'], $serCodes);
  44. $serCodes[] = $val[6]['word'];
  45. }
  46. // var_dump($val[6]['word'], $val[7]['word'], $val[4]['word']);
  47. // var_dump('-------------');
  48. $fanwei = $this->fanwei($val[6]['word'], $val[7]['word'], $val[4]['word'], $fanwei);
  49. if (empty($fanwei)) {
  50. continue;
  51. }
  52. $result[] = $fanwei;
  53. //exit;
  54. }
  55. $qingxu = $this->jisuan($result);
  56. $absQx = [];
  57. if (empty($qingxu)) {
  58. return $this->_json_succ('success');
  59. //return $this->success();
  60. }
  61. foreach ($qingxu as $qxK => $qxV) {
  62. $absQx[$qxK] = abs($qxV);
  63. }
  64. arsort($absQx);
  65. $maxValues = array_slice($absQx, 0, 2);
  66. $sortData = [];
  67. foreach ($maxValues as $keys => $vals) {
  68. $sortData[] = [$keys, $vals];
  69. }
  70. if (count($sortData) == 2) {
  71. $one = $sortData[0];
  72. $two = $sortData[1];
  73. if ($one[1] > $two[1]) {
  74. $data[] = $sortData[0];
  75. } elseif ($one[1] == $two[1]) {
  76. $data = $sortData;
  77. } else {
  78. $data[] = $sortData[1];
  79. }
  80. } else {
  81. $data = $sortData;
  82. }
  83. return $this->_json_succ($data);
  84. //return $this->success($data);
  85. }
  86. public function fanwei($xmdm, $name, $jieguo, $fanwei)
  87. {
  88. $average = ($fanwei[1] - $fanwei[0]) / 5;
  89. $averageArr = [];
  90. $levels = [3, 2, 1, 0, -1, -2, -3];
  91. $averageArr[0] = ['max' => $fanwei[1], 'level' => 3];
  92. for ($i = 1; $i <= 5; $i++) {
  93. if ($i == 1) {
  94. $max = $fanwei[1];
  95. $min = number_format($fanwei[1] - $average * $i, 1);
  96. } else {
  97. $max = number_format($fanwei[1] - $average * ($i - 1), 1);
  98. $min = number_format($fanwei[1] - $average * $i, 1);
  99. }
  100. $averageArr[$i] = ['max' => $max, 'min' => $min, 'level' => $levels[$i]];
  101. }
  102. array_push($averageArr, ['max' => $fanwei[0], 'level' => -3]);
  103. //var_dump($name, $averageArr);
  104. $rangeArr = [
  105. //1. 身体元素
  106. //铁
  107. 'fe' => ['3' => ['焦虑(中)'], '2' => ['焦虑(中)'], '1' => ['焦虑(轻)'], '-1' => ['抑郁(轻)', '愤怒(轻)'], '-2' => ['抑郁(中)'], '-3' => ['抑郁(中)']],
  108. //钙
  109. 'ca' => ['3' => ['焦虑(中)', '抑郁(中)'], '2' => ['焦虑(中)', '抑郁(中)'], '1' => ['焦虑(轻)', '抑郁(轻)'], '-1' => ['焦虑(轻)', '愤怒(轻)'], '-2' => ['焦虑(中)', '易激惹(中)'], '-3' => ['焦虑(中)', '易激惹(中)']],
  110. //镁
  111. 'mg' => ['-2' => ['焦虑(中)', '易怒(中)', '抑郁(中)'], '-3' => ['焦虑(中)', '易怒(中)', '抑郁(中)']],
  112. //钾
  113. 'k' => ['3' => ['愤怒(中)'], '2' => ['愤怒(中)'], '-2' => ['抑郁(中)'], '-3' => ['抑郁(中)']],
  114. //钠
  115. 'na' => ['3' => ['愤怒(中)'], '2' => ['愤怒(中)'], '-2' => ['抑郁(中)'], '-3' => ['抑郁(中)']],
  116. //氯
  117. 'c1' => ['3' => ['愤怒(中)', '恐惧(中)'], '2' => ['愤怒(中)', '恐惧(中)'], '1' => ['愤怒(轻)', '恐惧(轻)'], '-1' => ['抑郁(轻)', '焦虑(轻)'], '-2' => ['抑郁(中)', '焦虑(中)'], '-3' => ['抑郁(中)', '焦虑(中)']],
  118. //2. 心肝肾代谢
  119. //丙氨酸转氨酶(谷丙)
  120. 'alt' => ['3' => ['愤怒)中)', '恐惧(中)'], '2' => ['愤怒(中)', '恐惧(中)'], '1' => ['愤怒(轻)', '恐惧(轻)'], '-1' => ['焦虑(轻)'], '-2' => ['抑郁(中)', '焦虑(中)'], '-3' => ['抑郁(中)']],
  121. //天门冬氨酸氨基转移酶(谷草)
  122. 'ast' => ['3' => ['愤怒)中)', '恐惧(中)'], '2' => ['愤怒(中)', '恐惧(中)'], '1' => ['愤怒(轻)', '恐惧(轻)'], '-1' => ['焦虑(轻)'], '-2' => ['抑郁(中)', '焦虑(中)'], '-3' => ['抑郁(中)']],
  123. //碱性磷酸酶
  124. 'alp' => ['3' => ['愤怒)中)', '恐惧(中)'], '2' => ['愤怒(中)', '恐惧(中)'], '1' => ['愤怒(轻)', '恐惧(轻)'], '-1' => ['焦虑(轻)'], '-2' => ['抑郁(中)', '焦虑(中)'], '-3' => ['抑郁(中)']],
  125. //γ-谷氨酰基转移酶
  126. 'ggt' => ['3' => ['愤怒)中)', '恐惧(中)'], '2' => ['愤怒(中)', '恐惧(中)'], '1' => ['愤怒(轻)', '恐惧(轻)'], '-1' => ['焦虑(轻)'], '-2' => ['抑郁(中)', '焦虑(中)'], '-3' => ['抑郁(中)']],
  127. //胆碱酯酶
  128. 'che' => ['3' => ['愤怒)中)', '恐惧(中)'], '2' => ['愤怒(中)', '恐惧(中)'], '1' => ['愤怒(轻)', '恐惧(轻)'], '-1' => ['焦虑(轻)'], '-2' => ['抑郁(中)', '焦虑(中)'], '-3' => ['抑郁(中)']],
  129. //3. 胆功代谢
  130. //总胆红素
  131. 'tbil' => ['3' => ['愤怒(中)', '抑郁(中)'], '2' => ['愤怒(中)', '抑郁(中)'], '-1' => ['焦虑(轻)'], '-2' => ['抑郁(中)'], '-3' => ['抑郁(中)']],
  132. //直接胆红素
  133. 'dbil' => ['3' => ['愤怒(中)', '抑郁(中)', '焦虑)中)'], '2' => ['愤怒(中)', '抑郁(中)', '焦虑(中)'], '1' => ['愤怒)轻)', '抑郁(轻)', '焦虑)轻)'], '-1' => ['焦虑(轻)'], '-2' => ['抑郁(中)']],
  134. //间接胆红素
  135. 'ibil' => ['3' => ['抑郁(中)', '焦虑)中)'], '2' => ['抑郁(中)', '焦虑(中)'], '1' => ['抑郁(轻)', '焦虑(轻)'], '-1' => ['焦虑(轻)'], '-2' => ['抑郁(中)'], '-3' => ['抑郁(中)']],
  136. //4. 糖、脂肪、蛋白质代谢
  137. //同型半胱氨酸
  138. 'hcy' => ['3' => ['焦虑(中)', '抑郁(中)'], '2' => ['焦虑(中)', '抑郁(中)'], '1' => ['焦虑(轻)', '抑郁(轻)'], '-2' => ['抑郁(中)'], '-3' => ['抑郁(中)']],
  139. //葡萄糖
  140. 'glu' => ['3' => ['愤怒(中)', '抑郁(中)', '焦虑(中)'], '2' => ['恐惧(中)', '委屈(轻)', '抑郁(轻)', '焦虑(轻)'], '-2' => ['抑郁(中)'], '-3' => ['抑郁(中)']],
  141. //总胆汁酸
  142. 'tba' => ['3' => ['焦虑(中)'], '2' => ['焦虑(中)'], '-1' => ['焦虑(轻)'], '-2' => ['抑郁(中)', '愤怒(中)'], '-3' => ['抑郁(中)', '愤怒(中)']],
  143. //甘油三酯
  144. 'tg' => ['3' => ['焦虑(中)', '抑郁(中)'], '2' => ['焦虑(中)', '抑郁(中)'], '1' => ['焦虑(轻)'], '-2' => ['抑郁(中)']],
  145. //总胆固醇
  146. 'chol' => ['3' => ['愤怒(中)', '抑郁(中)', '焦虑(中)', '恐惧(中)'], '2' => ['愤怒(中)', '抑郁(中)', '焦虑(中)', '恐惧(中)'], '1' => ['愤怒(轻)', '抑郁(轻)', '焦虑(轻)', '恐惧(轻)'], '-1' => ['焦虑(轻)', '抑郁(轻)'], '-2' => ['焦虑(中)', '抑郁(中)'], '-3' => ['焦虑(中)', '抑郁(中)']],
  147. //高密度脂蛋白
  148. 'hdl' => ['3' => ['愤怒(中)', '焦虑(中)'], '2' => ['愤怒(中)', '焦虑(中)'], '1' => ['抑郁(轻)', '焦虑(轻)'], '-1' => ['愤怒(轻)', '焦虑(轻)'], '-2' => ['愤怒(中)', '焦虑(中)'], '-3' => ['愤怒(中)', '焦虑(中)']],
  149. //低密度脂蛋白
  150. 'ldl' => ['3' => ['抑郁(中)', '焦虑(中)'], '2' => ['抑郁(中)', '焦虑(中)'], '1' => ['抑郁(轻)', '焦虑(轻)'], '-1' => ['愤怒(轻)', '焦虑(轻)'], '-2' => ['愤怒(中)', '焦虑(中)'], '-3' => ['愤怒(中)', '焦虑(中)']],
  151. //小而密低密度脂蛋白
  152. 'sdldl' => ['3' => ['抑郁(中)', '焦虑(中)'], '2' => ['抑郁(中)', '焦虑(中)'], '1' => ['抑郁(轻)', '焦虑(轻)'], '-1' => ['愤怒(轻)', '焦虑(轻)'], '-2' => ['愤怒(中)', '焦虑(中)'], '-3' => ['愤怒(中)', '焦虑(中)']],
  153. //载脂蛋白A1
  154. 'apoa1' => ['3' => ['抑郁(中)', '焦虑(中)'], '2' => ['抑郁(中)', '焦虑(中)'], '1' => ['抑郁(轻)', '焦虑(轻)'], '-1' => ['愤怒(轻)', '焦虑(轻)'], '-2' => ['愤怒(中)', '焦虑(中)'], '-3' => ['愤怒(中)', '焦虑(中)']],
  155. //载脂蛋白B
  156. 'apob' => ['3' => ['焦虑(中)', '抑郁(中)'], '2' => ['焦虑(中)', '抑郁(中)'], '1' => ['焦虑(轻)', '抑郁(轻)']],
  157. //尿酸
  158. 'uric' => ['3' => ['焦虑(中)', '恐惧(中)'], '2' => ['焦虑(中)', '恐惧(中)'], '1' => ['焦虑(轻)']],
  159. // '尿素' => [],
  160. //5. 免疫
  161. //总蛋白
  162. 'tp' => ['3' => ['愤怒(中)'], '2' => ['愤怒(中)'], '-2' => ['焦虑(中)', '恐惧(中)'], '-3' => ['焦虑(中)', '恐惧(中)']],
  163. //白蛋白
  164. 'alb' => ['3' => ['愤怒(中)'], '2' => ['愤怒(中)'], '1' => ['焦虑(轻)'], '-1' => ['焦虑(轻)'], '-2' => ['焦虑(中)', '恐惧(中)'], '-3' => ['焦虑(中)', '恐惧(中)']],
  165. //球蛋白
  166. 'glb' => ['3' => ['焦虑(中)', '恐惧(中)'], '2' => ['恐惧(中)', '焦虑(中)'], '1' => ['焦虑(轻)'], '-1' => ['焦虑(轻)'], '-2' => ['焦虑(中)', '恐惧(中)'], '-3' => ['焦虑(中)', '恐惧(中)']],
  167. //白(中)球蛋白比值
  168. 'a:g' => ['3' => ['愤怒(中)', '易怒(中)'], '2' => ['愤怒(中)', '易怒(中)'], '1' => ['焦虑(轻)'], '-1' => ['焦虑(中)'], '-2' => ['抑郁(中)'], '-3' => ['抑郁(中)']],
  169. //6. 肌肉代谢
  170. //肌酐
  171. 'crea' => ['3' => ['愤怒(中)'], '2' => ['愤怒(中)'], '-2' => ['焦虑(中)', '恐惧(中)'], '-3' => ['焦虑(中)', '恐惧(中)']],
  172. //肌酸激酶
  173. 'ck' => ['3' => ['愤怒(中)'], '2' => ['愤怒(中)'], '1' => ['焦虑(轻)'], '-1' => ['焦虑(轻)'], '-2' => ['焦虑(中)', '恐惧(中)'], '-3' => ['焦虑(中)', '恐惧(中)']],
  174. //肌酸激酶同工酶
  175. 'ckmb' => ['3' => ['焦虑(中)', '恐惧(中)'], '2' => ['恐惧(中)', '焦虑(中)'], '1' => ['焦虑(轻)'], '-1' => ['焦虑(轻)'], '-2' => ['抑郁(中)'], '-3' => ['抑郁(中)']],
  176. //乳酸脱氢酶
  177. 'ldh' => ['3' => ['焦虑(中)', '恐惧(中)'], '2' => ['恐惧(中)', '焦虑(中)'], '1' => ['焦虑(轻)'], '-1' => ['焦虑(轻)'], '-2' => ['抑郁(中)'], '-3' => ['抑郁(中)']],
  178. //7. 血常规免疫
  179. //白细胞
  180. 'wbc' => ['3' => ['抑郁(中)', '恐惧(中)'], '2' => ['抑郁(中)', '恐惧(中)'], '1' => ['焦虑(轻)', '恐惧(轻)'], '-1' => ['焦虑(轻)', '抑郁(轻)'], '-2' => ['抑郁(中)'], '-3' => ['抑郁(中)']],
  181. //中性粒细胞
  182. 'meut' => ['3' => ['愤怒(中)', '恐惧(中)', '焦虑(中)'], '2' => ['愤怒(中)', '恐惧(中)', '焦虑(中)'], '1' => ['愤怒(轻)', '焦虑(轻)', '恐惧(轻)'], '-1' => ['焦虑(轻)', '抑郁(轻)'], '-2' => ['抑郁(中)', '焦虑(中)'], '-3' => ['抑郁(中)', '焦虑(中)']],
  183. 'meut%' => ['3' => ['愤怒(中)', '恐惧(中)', '焦虑(中)'], '2' => ['愤怒(中)', '恐惧(中)', '焦虑(中)'], '1' => ['愤怒(轻)', '焦虑(轻)', '恐惧(轻)'], '-1' => ['焦虑(轻)', '抑郁(轻)'], '-2' => ['抑郁(中)', '焦虑(中)'], '-3' => ['抑郁(中)', '焦虑(中)']],
  184. //淋巴细胞
  185. 'lymph' => ['3' => ['焦虑(中)', '愤怒(中)'], '2' => ['焦虑(中)', '愤怒(中)'], '1' => ['焦虑(轻)', '愤怒(轻)'], '-1' => ['愤怒(轻)', '抑郁(轻)'], '-2' => ['抑郁(中)'], '-3' => ['抑郁(中)']],
  186. //单核细胞
  187. 'monocytes' => ['3' => ['焦虑(中)', '抑郁(中)'], '2' => ['焦虑(中)', '抑郁(中)'], '1' => ['焦虑(轻)', '抑郁(轻)'], '-1' => ['焦虑(轻)'], '-2' => ['抑郁(中)'], '-3' => ['抑郁(中)']],
  188. //嗜酸粒细胞
  189. 'eos' => ['3' => ['焦虑(中)', '恐惧(中)'], '2' => ['恐惧(中)', '焦虑(中)'], '1' => ['焦虑(轻)', '恐惧(轻)'], '-1' => ['焦虑(轻)', '抑郁(轻)']], '-2' => ['抑郁(中)', '焦虑(中)'], '-3' => ['抑郁(中)', '焦虑(中)'],
  190. //嗜碱性粒细胞
  191. 'basophil' => ['3' => ['愤怒(中)', '焦虑(中)', '恐惧(中)'], '2' => ['愤怒(中)', '恐惧(中)', '焦虑(中)'], '1' => ['焦虑(轻)', '恐惧(轻)'], '-1' => ['焦虑(轻)'], '-2' => ['抑郁(中)', '焦虑(中)']],
  192. //8. 贫血
  193. //红细胞
  194. 'rbc' => ['3' => ['愤怒(中)'], '2' => ['愤怒(中)'], '-1' => ['抑郁(轻)'], '-2' => ['抑郁(中)'], '-3' => ['抑郁(中)']],
  195. //血红蛋白
  196. 'hgb' => ['3' => ['愤怒(中)', '恐惧(中)', '焦虑(中)'], '2' => ['愤怒(中)', '恐惧(中)', '焦虑(中)'], '1' => ['愤怒(轻)', '焦虑(轻)'], '-1' => ['抑郁(轻)'], '-2' => ['抑郁(中)'], '-3' => ['抑郁(中)']],
  197. '红细胞比容/红细胞压积' => ['3' => ['愤怒(中)', '恐惧(中)'], '2' => ['愤怒(中)', '恐惧(中)'], '1' => ['愤怒(轻)', '焦虑(轻)'], '-1' => ['焦虑(轻)', '抑郁(轻)'], '-2' => ['抑郁(中)'], '-3' => ['抑郁(中)']],
  198. //红细胞平均体积
  199. 'mcv' => ['3' => ['焦虑(中)', '抑郁(中)'], '2' => ['焦虑(中)', '抑郁(中)'], '1' => ['焦虑(轻)', '抑郁(轻)'], '-1' => ['焦虑(轻)'], '-2' => ['抑郁(中)', '焦虑(中)'], '-3' => ['抑郁(中)', '焦虑(中)']],
  200. //平均血红蛋白含量
  201. 'mch' => ['3' => ['抑郁(中)'], '2' => ['抑郁(中)'], '1' => ['焦虑(轻)', '抑郁(轻)'], '-1' => ['焦虑(轻)', '抑郁(轻)'], '-2' => ['抑郁(中)', '焦虑(中)'], '-3' => ['抑郁(中)', '焦虑(中)']],
  202. //平均血红蛋白浓度
  203. 'mchc' => ['3' => ['愤怒(中)', '恐惧(中)'], '2' => ['愤怒(中)', '恐惧(中)', '焦虑(中)'], '1' => ['焦虑(轻)', '恐惧(轻)'], '-1' => ['焦虑(轻)', '抑郁(轻)']], '-2' => ['抑郁(中)', '焦虑(中)'], '-3' => ['抑郁(中)', '焦虑(中)'],
  204. //红细胞分布宽度
  205. 'rdw-cv' => ['3' => ['抑郁(中)'], '2' => ['抑郁(中)', '焦虑(中)'], '1' => ['焦虑(轻)', '抑郁(轻)'], '-1' => ['焦虑(轻)'], '-2' => ['抑郁(中)', '焦虑(中)'], '-3' => ['抑郁(中)']],
  206. //血小板
  207. 'plt' => ['3' => ['焦虑(中)', '愤怒(中)', '抑郁(中)'], '2' => ['抑郁(中)'], '1' => ['焦虑(轻)', '愤怒(轻)'], '-1' => ['愤怒(轻)', '抑郁(轻)'], '-2' => ['抑郁(中)'], '-3' => ['抑郁(中)']],
  208. //平均血小板体积
  209. 'mpv' => ['3' => ['焦虑(中)', '抑郁(中)'], '2' => ['焦虑(中)', '抑郁(中)'], '1' => ['焦虑(轻)', '抑郁(轻)'], '-1' => ['焦虑(轻)'], '-2' => ['抑郁(中)', '焦虑(中)'], '-3' => ['抑郁(中)']],
  210. //血小板体积分布宽度
  211. 'pdw' => ['3' => ['抑郁(中)'], '2' => ['抑郁(中)'], '1' => ['焦虑(轻)', '恐惧(轻)']],
  212. //血小板压积
  213. 'pct' => ['3' => ['抑郁(中)'], '2' => ['抑郁(中)', '焦虑(中)'], '1' => ['焦虑(轻)', '恐惧(轻)'], '-1' => ['焦虑(轻)'], '-2' => ['抑郁(中)', '焦虑(中)'], '-3' => ['抑郁(中)']],
  214. ];
  215. $reslut = [];
  216. $xmdm = strtolower($xmdm);
  217. if (!isset($rangeArr[$xmdm])) {
  218. return $reslut;
  219. }
  220. $ra = $rangeArr[$xmdm];
  221. //范围
  222. foreach ($averageArr as $akey => $aval) {
  223. if ($jieguo > $averageArr[0]['max']) {
  224. //var_dump($averageArr[0]['level'], $ra[$averageArr[0]['level']]);
  225. if (!isset($ra[$averageArr[0]['level']])) {
  226. break;
  227. }
  228. $reslut[$xmdm] = ['name' => $name] + ['status' => $ra[$averageArr[0]['level']]] + ['level' => 3] + ['result' => $jieguo] + ['reference' => $fanwei[1] . '-' . $fanwei[0]] + ['range' => json_encode($averageArr)];
  229. break;
  230. } elseif (isset($aval['min']) && $jieguo > $aval['min'] && $jieguo < $aval['max']) {
  231. if (!isset($ra[$aval['level']])) {
  232. break;
  233. }
  234. $reslut[$xmdm] = ['name' => $name] + ['status' => $ra[$aval['level']]] + ['level' => $aval['level']] + ['result' => $jieguo] + ['reference' => $fanwei[1] . '-' . $fanwei[0]] + ['range' => json_encode($averageArr)];
  235. break;
  236. } elseif ($jieguo < $averageArr[6]['max']) {
  237. //var_dump($name, $averageArr[6]['level']);
  238. if (!isset($ra[$averageArr[6]['level']])) {
  239. break;
  240. }
  241. $reslut[$xmdm] = ['name' => $name] + ['status' => $ra[$averageArr[6]['level']]] + ['level' => -3] + ['result' => $jieguo] + ['reference' => $fanwei[1] . '-' . $fanwei[0]] + ['range' => json_encode($averageArr)];
  242. break;
  243. }
  244. }
  245. //var_dump($name, $jieguo, $reslut);exit;
  246. return $reslut;
  247. }
  248. public function jisuan($data)
  249. {
  250. //身体元素 钾钠氯铁钙镁
  251. $shenti = ['k', 'na', 'c1', 'fe', 'ca', 'mg'];
  252. // $fe = ['-2' => -2 * 99, '-3' => -3 * 99];
  253. // $na = ['-3' => -3 * 99];
  254. $re = [];
  255. $xiangmuArr = [];
  256. $shentiRes = [];
  257. foreach ($data as $key => $item) {
  258. foreach ($item as $dm => $val) {
  259. if (in_array($dm, $shenti)) {
  260. if ($dm == 'fe') {
  261. if ($val['level'] == -2) {
  262. $val['level'] = -2 * 99;
  263. }
  264. if ($val['level'] == -3) {
  265. $val['level'] = -3 * 99;
  266. }
  267. }
  268. if ($dm == 'na') {
  269. if ($val['level'] == -3) {
  270. $val['level'] = -3 * 99;
  271. }
  272. }
  273. //var_dump($val['status'], $dm);
  274. foreach ($val['status'] as $sts) {
  275. if (!isset($shentiRes[$sts])) {
  276. $shentiRes[$sts] = $val['level'];
  277. } else {
  278. $shentiRes[$sts] += $val['level'];
  279. }
  280. }
  281. }
  282. $xiangmuArr[$dm] = $val;
  283. }
  284. }
  285. $re['shenti'] = $shentiRes;
  286. //【肝】 γ-谷氨酰基转移酶 --ggt
  287. $ganVal = [];
  288. $gxsRes = [];
  289. if (isset($xiangmuArr['ggt'])) {
  290. $ganFanWeiArr = ['3' => ['愤怒(中)'], '2' => ['愤怒(中)'], '1' => ['愤怒(轻)'], '-1' => ['焦虑(轻)'], '-2' => ['抑郁(中)', '焦虑(中)'], '-3' => ['抑郁(中)']];
  291. if (isset($ganFanWeiArr[$xiangmuArr['ggt']['level']])) {
  292. $ganVal = ['status' => $ganFanWeiArr[$xiangmuArr['ggt']['level']], 'val' => $xiangmuArr['ggt']['level']];
  293. foreach ($ganFanWeiArr[$xiangmuArr['ggt']['level']] as $gan) {
  294. if (!isset($gxsRes[$gan])) {
  295. $gxsRes[$gan] = $xiangmuArr['ggt']['level'];
  296. } else {
  297. $gxsRes[$gan] += $xiangmuArr['ggt']['level'];
  298. }
  299. }
  300. }
  301. }
  302. //【心】[丙氨基转移酶alt]*2-[γ-谷氨酰基转移酶ggt]=[心]
  303. $xinVal = [];
  304. if (isset($xiangmuArr['alt']) && isset($xiangmuArr['ggt'])) {
  305. $xinDiff = $xiangmuArr['alt']['level'] * 2 - $xiangmuArr['ggt']['level'] * 1;
  306. $xinFanWeiArr = ['6~9' => ['愤怒(中)', '恐惧(中)'], '3~5' => ['愤怒(中)', '恐惧(中)'], '1~2' => ['愤怒(轻)', '恐惧(轻)', '焦虑(轻)'], '-2~-1' => ['焦虑(轻)'], '-5~-3' => ['抑郁(中)', '焦虑(中)'], '-9~-6' => ['抑郁(中)']];
  307. foreach ($xinFanWeiArr as $xinKey => $xStatus) {
  308. $xnum = explode('~', $xinKey);
  309. if ($xinDiff > $xnum[0] && $xinDiff < $xnum[1]) {
  310. $xinVal = ['status' => $xStatus, 'val' => $xinDiff];
  311. foreach ($xStatus as $xin) {
  312. if (!isset($gxsRes[$xin])) {
  313. $gxsRes[$xin] = $xinDiff;
  314. } else {
  315. $gxsRes[$xin] += $xinDiff;
  316. }
  317. }
  318. }
  319. }
  320. }
  321. //【肾】[丙氨基转移酶]*3-[天门冬氨酸氨基转移酶]*2 --ast
  322. $shenVal = [];
  323. if (isset($xiangmuArr['alt']) && isset($xiangmuArr['ast'])) {
  324. $shenDiff = $xiangmuArr['alt']['level'] * 3 - $xiangmuArr['ast']['level'] * 1;
  325. $shenFanWeiArr = ['10~15' => ['愤怒(中)', '恐惧(中)'], '5~9' => ['愤怒(中)', '恐惧(中)', '焦虑(中)'], '1~4' => ['焦虑(轻)'], '-4~-1' => ['焦虑(轻)'], '-9~-5' => ['抑郁(中)', '焦虑(中)'], '-15~-10' => ['抑郁(中)', '焦虑(中)']];
  326. foreach ($shenFanWeiArr as $senKey => $senStatus) {
  327. $sennum = explode('~', $senKey);
  328. if ($shenDiff > $sennum[0] && $shenDiff < $sennum[1]) {
  329. $shenVal = ['status' => $senStatus, 'val' => $shenDiff];
  330. foreach ($senStatus as $sen) {
  331. if (!isset($gxsRes[$sen])) {
  332. $gxsRes[$sen] = $shenDiff;
  333. } else {
  334. $gxsRes[$sen] += $shenDiff;
  335. }
  336. }
  337. }
  338. }
  339. }
  340. //var_dump($ganVal,$xinVal,$shenVal);
  341. $re['xgs'] = $gxsRes;
  342. //3. 胆功代谢
  343. $zjdhs = [];//直接、间接胆红素
  344. $dhsjl = [];//胆红素结论
  345. if (isset($xiangmuArr['dbil']) && isset($xiangmuArr['ibil'])) {
  346. $dbilArr = [];
  347. $ibilArr = [];
  348. $dbVal = 0;
  349. $ibVal = 0;
  350. foreach ($xiangmuArr['dbil']['status'] as $dbil) {
  351. $dbVal += $xiangmuArr['dbil']['level'];
  352. if (isset($dbilArr[$dbil])) {
  353. $dbilArr[$dbil] += $xiangmuArr['dbil']['level'];
  354. } else {
  355. $dbilArr[$dbil] = $xiangmuArr['dbil']['level'];
  356. }
  357. }
  358. foreach ($xiangmuArr['ibil']['status'] as $ibil) {
  359. $ibVal += $xiangmuArr['ibil']['level'];
  360. if (isset($ibilArr[$ibil])) {
  361. $ibilArr[$ibil] += $xiangmuArr['ibil']['level'];
  362. } else {
  363. $ibilArr[$ibil] = $xiangmuArr['ibil']['level'];
  364. }
  365. }
  366. if (abs($dbVal) > abs($ibVal)) {
  367. $zjdhs = $dbilArr;
  368. } else {
  369. $zjdhs = $ibilArr;
  370. }
  371. //$re['dan'] = ['0' => $zjdhs];
  372. }
  373. if (isset($xiangmuArr['tbil']) && !empty($zjdhs)) {
  374. foreach ($xiangmuArr['tbil']['status'] as $tbil) {
  375. if (isset($dhsjl[$tbil])) {
  376. $dhsjl[$tbil] += $xiangmuArr['tbil']['level'];
  377. } else {
  378. $dhsjl[$tbil] = $xiangmuArr['tbil']['level'];
  379. }
  380. }
  381. foreach ($zjdhs as $zjdhKey => $zjdhVal) {
  382. if (isset($dhsjl[$zjdhKey])) {
  383. $dhsjl[$zjdhKey] += $zjdhVal;
  384. } else {
  385. $dhsjl[$zjdhKey] = $zjdhVal;
  386. }
  387. }
  388. }
  389. $re['dan'] = $dhsjl;
  390. //4. 糖、脂肪、蛋白质代谢
  391. //[同型半胱氨酸]+[葡萄糖]+[总胆汁酸]+[甘油三酯]+[总胆固醇]+[高密度脂蛋白]+[低密度脂蛋白]+[小而密低密度脂蛋白]+[载脂蛋白A1]+[载脂蛋白bB]+[尿酸]
  392. $dxie = ['hcy', 'glu', 'tba', 'tg', 'chol', 'hdl', 'hdl', 'ldl', 'sdldl', 'uric'];
  393. $dxieRes = [];
  394. foreach ($data as $key => $item) {
  395. foreach ($item as $dm => $val) {
  396. if (in_array($dm, $dxie)) {
  397. foreach ($val['status'] as $sts) {
  398. if (!isset($dxieRes[$sts])) {
  399. $dxieRes[$sts] = $val['level'];
  400. } else {
  401. $dxieRes[$sts] += $val['level'];
  402. }
  403. }
  404. }
  405. }
  406. }
  407. $re['daixie'] = $dxieRes;
  408. //5. 免疫
  409. //[总蛋白tp]+[白蛋白alb]+[球蛋白glb]+[白(中)][球蛋白比值a:g]
  410. $mianyiRes = [];
  411. $baiQiuArr = [];
  412. $qiuDanBaiArr = [];
  413. $qiuMaxArr = [];
  414. $albVal = 0;
  415. $glbVal = 0;
  416. if (isset($xiangmuArr['alb']) && isset($xiangmuArr['glb'])) {
  417. foreach ($xiangmuArr['alb']['status'] as $sts) {
  418. $albVal += $xiangmuArr['alb']['level'];
  419. if (isset($baiQiuArr[$sts])) {
  420. $baiQiuArr[$sts] += $xiangmuArr['alb']['level'];
  421. } else {
  422. $baiQiuArr[$sts] = $xiangmuArr['alb']['level'];
  423. }
  424. }
  425. foreach ($xiangmuArr['glb']['status'] as $sts) {
  426. $glbVal += $xiangmuArr['glb']['level'];
  427. if (isset($qiuDanBaiArr[$sts])) {
  428. $qiuDanBaiArr[$sts] += $xiangmuArr['glb']['level'];
  429. } else {
  430. $qiuDanBaiArr[$sts] = $xiangmuArr['glb']['level'];
  431. }
  432. }
  433. if (abs($albVal) > abs($glbVal)) {
  434. $qiuMaxArr = $baiQiuArr;
  435. } else {
  436. $qiuMaxArr = $qiuDanBaiArr;
  437. }
  438. }
  439. if (isset($xiangmuArr['tp']) && isset($xiangmuArr['a:g']) && !empty($biZhiArr)) {
  440. foreach ($xiangmuArr['tp']['status'] as $tpSts) {
  441. if (isset($mianyiRes[$tpSts])) {
  442. $mianyiRes[$tpSts] += $xiangmuArr['tp']['level'];
  443. } else {
  444. $mianyiRes[$tpSts] = $xiangmuArr['tp']['level'];
  445. }
  446. }
  447. foreach ($xiangmuArr['a:g']['status'] as $agSts) {
  448. if (isset($mianyiRes[$agSts])) {
  449. $mianyiRes[$agSts] += $xiangmuArr['a:g']['level'];
  450. } else {
  451. $mianyiRes[$agSts] = $xiangmuArr['a:g']['level'];
  452. }
  453. }
  454. foreach ($qiuMaxArr as $maxKey => $maxVal) {
  455. if (isset($mianyiRes[$maxKey])) {
  456. $mianyiRes[$maxKey] += $maxVal;
  457. } else {
  458. $mianyiRes[$maxKey] = $maxVal;
  459. }
  460. }
  461. }
  462. $re['mianyi'] = $mianyiRes;
  463. //6. 肌肉代谢
  464. //[肌酐][肌酸激酶][肌酸激酶同工酶][乳酸脱氢酶]
  465. $jirouDxie = ['crea', 'ckmb', 'ckmb', 'ldh'];
  466. $jrdxieRes = [];
  467. foreach ($data as $key => $item) {
  468. foreach ($item as $dm => $val) {
  469. if (in_array($dm, $jirouDxie)) {
  470. foreach ($val['status'] as $sts) {
  471. if (!isset($jrdxieRes[$sts])) {
  472. $jrdxieRes[$sts] = $val['level'];
  473. } else {
  474. $jrdxieRes[$sts] += $val['level'];
  475. }
  476. }
  477. }
  478. }
  479. }
  480. $re['jiroudx'] = $jrdxieRes;
  481. //7. 血常规免疫
  482. //[白细胞][中性粒细胞][中性粒细胞百分比][淋巴细胞][单核细胞][嗜酸粒细胞][嗜碱性粒细胞]
  483. $xue = ['wbc', 'meut', 'lymph', 'lymph', 'monocytes', 'eos', 'basophil'];
  484. $xueRes = [];
  485. foreach ($data as $key => $item) {
  486. foreach ($item as $dm => $val) {
  487. if (in_array($dm, $xue)) {
  488. foreach ($val['status'] as $sts) {
  489. if (!isset($xueRes[$sts])) {
  490. $xueRes[$sts] = $val['level'];
  491. } else {
  492. $xueRes[$sts] += $val['level'];
  493. }
  494. }
  495. }
  496. }
  497. }
  498. $re['xue'] = $xueRes;
  499. //8. 贫血
  500. //[红细胞][血红蛋白][红细胞比容/红细胞压积][红细胞平均体积][平均血红蛋白含量][平均血红蛋白浓度][红细胞分布宽度][血小板][平均血小板体积][血小板体积分布宽度][血小板压积]
  501. $pinXue = ['rbc', 'hgb', 'mcv', 'mch', 'mchc', 'rdw-cv', 'plt', 'mpv', 'pdw'];
  502. $pinXueRes = [];
  503. $pinXlevel = [
  504. 'rbc' => ['-2' => -198, '-3' => 287],
  505. 'hgb' => ['-2' => -198, '-3' => 287],
  506. 'mcv' => ['-2' => -198, '-3' => -287],
  507. 'rdw-cv' => ['-1' => -99, '-3' => -287],
  508. ];
  509. foreach ($data as $key => $item) {
  510. foreach ($item as $dm => $val) {
  511. if (in_array($dm, $pinXue)) {
  512. if (isset($pinXlevel[$dm][$val['level']])) {
  513. $level = $pinXlevel[$dm][$val['level']];
  514. } else {
  515. $level = $val['level'];
  516. }
  517. foreach ($val['status'] as $sts) {
  518. if (!isset($pinXueRes[$sts])) {
  519. $pinXueRes[$sts] = $level;
  520. } else {
  521. $pinXueRes[$sts] += $level;
  522. }
  523. }
  524. }
  525. }
  526. }
  527. $re['pinxue'] = $pinXueRes;
  528. $jieguo = [];
  529. foreach ($re as $rr) {
  530. if (!empty($rr)) {
  531. foreach ($rr as $st => $stVal) {
  532. if (isset($jieguo[$st])) {
  533. $jieguo[$st] += $stVal;
  534. } else {
  535. $jieguo[$st] = $stVal;
  536. }
  537. }
  538. }
  539. }
  540. return $jieguo;
  541. }
  542. public function getCode($name, $check)
  543. {
  544. $code = [
  545. 'fe' => '铁',
  546. //钙
  547. 'ca' => '钙',
  548. //镁
  549. 'mg' => '镁',
  550. //钾
  551. 'k' => '钾',
  552. //钠
  553. 'na' => '钠',
  554. //氯
  555. 'c1' => '氯',
  556. //2. 心肝肾代谢
  557. //丙氨酸转氨酶(谷丙)
  558. 'alt' => '丙氨酸转氨酶',
  559. //天门冬氨酸氨基转移酶(谷草)
  560. 'ast' => '天门冬氨酸氨基转移酶',
  561. //碱性磷酸酶
  562. 'alp' => '碱性磷酸酶',
  563. //γ-谷氨酰基转移酶
  564. 'ggt' => 'γ-谷氨酰基转移酶',
  565. //胆碱酯酶
  566. 'che' => '胆碱酯酶',
  567. //3. 胆功代谢
  568. //总胆红素
  569. 'tbil' => '总胆红素',
  570. //直接胆红素
  571. 'dbil' => '直接胆红素',
  572. //间接胆红素
  573. 'ibil' => '间接胆红素',
  574. //4. 糖、脂肪、蛋白质代谢
  575. //同型半胱氨酸
  576. 'hcy' => '同型半胱氨酸',
  577. //葡萄糖
  578. 'glu' => '葡萄糖',
  579. //总胆汁酸
  580. 'tba' => '总胆汁酸',
  581. //甘油三酯
  582. 'tg' => '甘油三酯',
  583. //总胆固醇
  584. 'chol' => '总胆固醇',
  585. //高密度脂蛋白
  586. 'hdl' => '高密度脂蛋白',
  587. //低密度脂蛋白
  588. 'ldl' => '低密度脂蛋白',
  589. //小而密低密度脂蛋白
  590. 'sdldl' => '小而密低密度脂蛋白',
  591. 'apoa1' => '载脂蛋白A1',
  592. 'apob' => '载脂蛋白B',
  593. //尿酸
  594. 'uric' => '尿酸',
  595. // '尿素' => [],
  596. //5. 免疫
  597. //总蛋白
  598. 'tp' => '总蛋白',
  599. //白蛋白
  600. 'alb' => '白蛋白',
  601. //球蛋白
  602. 'glb' => '球蛋白',
  603. //白(中)球蛋白比值
  604. 'a:g' => '白(中)球蛋白比值',
  605. //6. 肌肉代谢
  606. //肌酐
  607. 'crea' => '肌酐',
  608. //肌酸激酶
  609. 'ck' => '肌酸激酶',
  610. //肌酸激酶同工酶
  611. 'ckmb' => '肌酸激酶同工酶',
  612. //乳酸脱氢酶
  613. 'ldh' => '乳酸脱氢酶',
  614. //7. 血常规免疫
  615. //白细胞
  616. 'wbc' => '白细胞',
  617. //中性粒细胞
  618. 'meut' => '中性粒细胞',
  619. 'meut%' => '中性粒细胞百分比',
  620. //淋巴细胞
  621. 'lymph' => '淋巴细胞',
  622. 'monocytes' => '单核细胞',
  623. 'eos' => '嗜酸粒细胞',
  624. 'basophil' => '嗜碱性粒细胞',
  625. //8. 贫血
  626. //红细胞
  627. 'rbc' => '红细胞',
  628. //血红蛋白
  629. 'hgb' => '血红蛋白',
  630. '红细胞比容/红细胞压积' => '红细胞比容/红细胞压积',
  631. //红细胞平均体积
  632. 'mcv' => '红细胞平均体积',
  633. //平均血红蛋白含量
  634. 'mch' => '平均血红蛋白含量',
  635. //平均血红蛋白浓度
  636. 'mchc' => '平均血红蛋白浓度',
  637. //红细胞分布宽度
  638. 'rdw-cv' => '红细胞分布宽度',
  639. //血小板
  640. 'plt' => '血小板',
  641. //平均血小板体积
  642. 'mpv' => '平均血小板体积',
  643. //血小板体积分布宽度
  644. 'pdw' => '血小板体积分布宽度',
  645. 'pct' => '血小板压积',
  646. ];
  647. foreach ($code as $k => $v) {
  648. if (stripos($name, $v) !== false && !in_array($k, $check)) {
  649. return $k;
  650. }
  651. }
  652. }
  653. }