HandleData.java 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. package com.jyxt.getdatabyview;
  2. import com.jyxt.getdatabyview.view.repository.LISViewRepository;
  3. import com.jyxt.getdatabyview.view.repository.QualityIndicatorRepository;
  4. import org.slf4j.Logger;
  5. import org.slf4j.LoggerFactory;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.beans.factory.annotation.Value;
  8. import org.springframework.stereotype.Component;
  9. import java.util.*;
  10. @Component
  11. public class HandleData {
  12. private static final Logger log = LoggerFactory.getLogger(GetDataByViewApplication.class);
  13. @Autowired
  14. private LISViewRepository lisViewRepository;
  15. @Value("${resultWithUnit}")
  16. private String resultWithUnit;
  17. @Autowired
  18. private QualityIndicatorRepository qualityIndicatorRepository;
  19. private static final String RESULT_DELIMITER = "\\^";
  20. private static final List<String> qualityIndicatorList = Collections.unmodifiableList(
  21. Arrays.asList(
  22. "总标本不合格率", // 0
  23. "抗凝标本凝集率", // 1
  24. "标本类型错误率", // 2
  25. "标本容器错误率", // 3
  26. "标本溶血率", // 4
  27. "标本采集量错误率", // 5
  28. "急诊常规实验室内TAT中位数", // 6
  29. "急诊生化免疫实验室内TAT中位数", // 7
  30. "急诊凝血实验室内TAT中位数", // 8
  31. "急诊血常规检验前周转时间中位数", // 9
  32. "急诊血常规实验室内周转时间中位数", // 10
  33. "常规检验报告发放TAT时间符合率", // 11
  34. "检验报告不正确率", // 12
  35. "危急值通报率", // 13
  36. "危急值通报及时率", // 14
  37. "标本合格率", // 15
  38. "TAT时间合格率", // 16
  39. "报告准确率", // 17
  40. "危急值通报符合率" // 18
  41. )
  42. );
  43. public void startHandleData(String pingjiaId,String zhiliangzhibia,String bianzhishijian, String yuanshishuju) {
  44. if (qualityIndicatorList.contains(zhiliangzhibia)){
  45. // System.out.println(output);
  46. log.info("ID: {}, zhiliangzhibia: {}, bianzhishijian: {}, yuanshishuju: {}", pingjiaId, zhiliangzhibia, bianzhishijian, yuanshishuju);
  47. int QIIndex = qualityIndicatorList.indexOf(zhiliangzhibia);
  48. String DataDetail = "";
  49. String dateRange = DateRangeUtil.getDateRange(bianzhishijian);
  50. String[] resultParts = lisViewRepository.query(QIIndex,dateRange).split(RESULT_DELIMITER);
  51. // String[] resultParts = new String[] {"", "", ""};
  52. // if (pingjiaId.equals("1367710945618427904")) {
  53. // resultParts = new String[] {"100", "10000", "10000"};
  54. // }
  55. String resultValue = resultParts[0];
  56. if (resultValue.startsWith(".")) {
  57. resultValue = "0" + resultValue;
  58. }
  59. String IsQualified = null;
  60. if ((!Objects.equals(resultValue, ""))){
  61. IsQualified = ValueEvaluator.evaluateValue(resultValue,yuanshishuju);
  62. }
  63. String finalRes = resultValue;
  64. if(resultWithUnit.equals("1")){
  65. finalRes = resultValue+yuanshishuju.split("@")[2];
  66. }
  67. //总数统计
  68. if (resultParts.length==2){
  69. String total = resultParts[1];
  70. if ((!Objects.equals(resultValue, ""))&&(!Objects.equals(resultValue,null))&&(!Objects.equals(resultValue,"-1"))) {
  71. // System.out.println("output:"+ResultValue);
  72. log.info("Get LIS RetVal:{},zhiliangzhibiao:{},bianzhishijian:{}",resultParts,zhiliangzhibia,bianzhishijian);
  73. if (QIIndex==6){
  74. DataDetail = "同期临检(住院)及临检(门诊)的三大常规(血、尿、便)标本共 "+resultParts[1]+" 例";
  75. } else if (QIIndex==7){
  76. DataDetail = "同期临检急诊组的急诊生化、免疫标本共 "+resultParts[1]+" 例";
  77. } else if (QIIndex==8){
  78. DataDetail = "同期临检(住院)及临检(门诊) 的急诊血凝标本共 "+resultParts[1]+" 例";
  79. } else if ((QIIndex==9)||(QIIndex==10)){
  80. DataDetail = "同期临检(住院)及临检(门诊) 的急诊血常规标本共 "+resultParts[1]+" 例";
  81. }
  82. // qualityIndicatorRepository.save(pingjiaId, resultValue,total,DataDetail,IsQualified);
  83. //分子不需要整数
  84. qualityIndicatorRepository.save(pingjiaId, finalRes,resultValue,DataDetail,IsQualified);
  85. }
  86. } else if (resultParts.length==3){
  87. String numerator = resultParts[1];
  88. String denominator = resultParts[2];
  89. if ((!Objects.equals(resultValue, ""))&&(!Objects.equals(resultValue,null))&&(!Objects.equals(resultValue,"-1"))){
  90. log.info("Get LIS RetVal:{},zhiliangzhibiao:{},bianzhishijian:{}",resultParts,zhiliangzhibia,bianzhishijian);
  91. if (QIIndex==0){
  92. DataDetail = "不合格标本数 "+resultParts[1]+" 例,同期标本总数 "+resultParts[2]+" 例";
  93. } else if (QIIndex==1){
  94. DataDetail = "凝集的标本数 "+resultParts[1]+" 例,同期需抗凝的标本总数 "+resultParts[2]+" 例";
  95. } else if (QIIndex==2){
  96. DataDetail = "类型错误或不适当的标本数 "+resultParts[1]+" 例,同期标本总数 "+resultParts[2]+" 例";
  97. } else if (QIIndex==3){
  98. DataDetail = "采集容器错误的标本数 "+resultParts[1]+" 例,同期标本总数 "+resultParts[2]+" 例";
  99. } else if (QIIndex==4){
  100. DataDetail = "溶血的标本 "+resultParts[1]+" 例,同期标本总数 "+resultParts[2]+" 例";
  101. } else if (QIIndex==5){
  102. DataDetail = "量不足或过多(抗凝标本)的标本数 "+resultParts[1]+" 例,同期标本总数 "+resultParts[2]+" 例";
  103. } else if (QIIndex==12){
  104. DataDetail = "实验室发出的不正确报告数 "+resultParts[1]+" 例,报告总数 "+resultParts[2]+" 例";
  105. } else if (QIIndex==13){
  106. DataDetail = "已通报危急值数 "+resultParts[1]+" 例,同期需要通报危急值总数 "+resultParts[2]+" 例";
  107. } else if (QIIndex==14){
  108. DataDetail = "危急值通报时间(从结果确认到与临床医生交流的时间)满足规定时间的检验项目数 "+resultParts[1]+" 例,同期需要危急值满足规定时间通报的检验项目总数 "+resultParts[2]+" 例";
  109. } else if (QIIndex==15){
  110. DataDetail = "全年合格标本总数 "+resultParts[1]+" 例,全年标本总数 "+resultParts[2]+" 例";
  111. } else if (QIIndex==17){
  112. DataDetail = "实验室发出的正确报告数 "+resultParts[1]+" 例,同期实验室发出报告总数 "+resultParts[2]+" 例";
  113. } else if (QIIndex==18){
  114. DataDetail = "危急值通报时间(从结果确认到与临床医生交流的时间)满足规定时间的检验项目数 "+resultParts[1]+" 例,同期需要危急值通报的检验项目总数 "+resultParts[2]+" 例";
  115. }
  116. qualityIndicatorRepository.save(pingjiaId,finalRes,numerator,denominator,DataDetail,IsQualified);
  117. }
  118. } else {
  119. log.info("no result to save:zhiliangzhibiao:{},bianzhishijian:{}",zhiliangzhibia,bianzhishijian);
  120. }
  121. }
  122. }
  123. }