SheetSearchService.java 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. package thyyxxk.webserver.service.casefrontsheet;
  2. import lombok.extern.slf4j.Slf4j;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.stereotype.Service;
  5. import thyyxxk.webserver.dao.his.casefrontsheet.SheetSearchDao;
  6. import thyyxxk.webserver.entity.ResultVo;
  7. import thyyxxk.webserver.entity.casefrontsheet.StatisticsBySeason;
  8. import thyyxxk.webserver.entity.dictionary.PureCodeName;
  9. import thyyxxk.webserver.entity.dictionary.SearchDataParam;
  10. import thyyxxk.webserver.service.yibao.DictionaryService;
  11. import thyyxxk.webserver.utils.ExcelUtil;
  12. import thyyxxk.webserver.utils.ResultVoUtil;
  13. import thyyxxk.webserver.utils.StringUtil;
  14. import javax.servlet.http.HttpServletResponse;
  15. import java.util.ArrayList;
  16. import java.util.List;
  17. /**
  18. * @author dj
  19. */
  20. @Slf4j
  21. @Service
  22. public class SheetSearchService {
  23. private final SheetSearchDao dao;
  24. private final DictionaryService service;
  25. @Autowired
  26. public SheetSearchService(SheetSearchDao dao, DictionaryService service) {
  27. this.dao = dao;
  28. this.service = service;
  29. }
  30. public ResultVo<List<PureCodeName>> sheetSearch(SearchDataParam param) {
  31. final String content = '%' + param.getContent().toUpperCase() + '%';
  32. switch (param.getTarget()) {
  33. case "surgery":
  34. return ResultVoUtil.success(searchSurgery(param.getMethod(), content, param.getPage() - 1));
  35. case "pathologicDiag":
  36. return ResultVoUtil.success(searchPathologicDiag(param.getMethod(), content, param.getPage() - 1));
  37. case "place":
  38. return ResultVoUtil.success(searchBirthPlace(param.getMethod(), content, param.getPage() - 1));
  39. case "normalDiag":
  40. case "clinicdiag":
  41. return ResultVoUtil.success(searchClinicdiag(param.getMethod(), content, param.getPage() - 1));
  42. case "hurtReason":
  43. return ResultVoUtil.success(searchHurtReason(param.getMethod(), content, param.getPage() - 1));
  44. case "employee":
  45. return ResultVoUtil.success(searchEmployee(param.getMethod(), content, param.getPage() - 1));
  46. case "diag":
  47. return service.searchYbDiag(param);
  48. default:
  49. return ResultVoUtil.success(new ArrayList<>());
  50. }
  51. }
  52. private List<PureCodeName> searchSurgery(String method, String content, int page) {
  53. if (method.equals("alpha")) {
  54. method = "py_code";
  55. } else if (method.equals("code")) {
  56. method = "surgical_operation_code";
  57. } else {
  58. method = "operation_operation_name";
  59. }
  60. return dao.searchSurgery(method, content, page);
  61. }
  62. private List<PureCodeName> searchClinicdiag(String method, String content, int page) {
  63. if (method.equals("alpha")) {
  64. method = "py_code";
  65. }
  66. return dao.searchClinicdiag(method, content, page);
  67. }
  68. private List<PureCodeName> searchPathologicDiag(String method, String content, int page) {
  69. if (method.equals("alpha")) {
  70. method = "PY_CODE";
  71. } else if (method.equals("code")) {
  72. method = "CODE";
  73. } else {
  74. method = "NAME";
  75. }
  76. return dao.searchPathologicDiag(method, content, page);
  77. }
  78. private List<PureCodeName> searchBirthPlace(String method, String content, int page) {
  79. if (method.equals("alpha")) {
  80. method = "py_code";
  81. }
  82. return dao.searchBirthPlace(method, content, page);
  83. }
  84. private List<PureCodeName> searchHurtReason(String method, String content, int page) {
  85. if (method.equals("alpha")) {
  86. method = "py_code";
  87. }
  88. return dao.searchHurtReason(method, content, page);
  89. }
  90. private List<PureCodeName> searchEmployee(String method, String content, int page) {
  91. if (method.equals("alpha")) {
  92. method = "py_code";
  93. }
  94. return dao.searchEmployee(method, content, page);
  95. }
  96. /**
  97. * 1. 报送范围为出院日期在2019年1月1日—2021年12月31日,包括城镇职工、城乡居民基本医疗保险病人的住院数据(排除全自费、异地就医、工伤、生育保险类住院数据);
  98. * 2. NO41表以CSV文件格式提取,并按季度上传数据。单个上传文件上限为5万条病例数,如果数据量过大,也可按月度上传数据。(文件命名格式:“医疗机构名称_201901.csv”);
  99. * 3. 报送规范以《长株潭数据报送标准-附件1、2》为准,相关编码要按照贯标后报送,疾病编码、手术编码要按照医保编码2.0目录报送,AKC190、AKB020作为唯一联合主键。
  100. * */
  101. public void fetchStatisticsBySeason(HttpServletResponse response, String season) {
  102. String begntime, endtime;
  103. switch (season) {
  104. case "2019S1":
  105. begntime = "2019-01-01 00:00:00";
  106. endtime = "2019-03-31 23:59:59";
  107. break;
  108. case "2019S2":
  109. begntime = "2019-04-01 00:00:00";
  110. endtime = "2019-06-30 23:59:59";
  111. break;
  112. case "2019S3":
  113. begntime = "2019-07-01 00:00:00";
  114. endtime = "2019-09-30 23:59:59";
  115. break;
  116. case "2019S4":
  117. begntime = "2019-10-01 00:00:00";
  118. endtime = "2019-12-31 23:59:59";
  119. break;
  120. case "2020S1":
  121. begntime = "2020-01-01 00:00:00";
  122. endtime = "2020-03-31 23:59:59";
  123. break;
  124. case "2020S2":
  125. begntime = "2020-04-01 00:00:00";
  126. endtime = "2020-06-30 23:59:59";
  127. break;
  128. case "2020S3":
  129. begntime = "2020-07-01 00:00:00";
  130. endtime = "2020-09-30 23:59:59";
  131. break;
  132. case "2020S4":
  133. begntime = "2020-10-01 00:00:00";
  134. endtime = "2020-12-31 23:59:59";
  135. break;
  136. case "2021S1":
  137. begntime = "2021-01-01 00:00:00";
  138. endtime = "2021-03-31 23:59:59";
  139. break;
  140. case "2021S2":
  141. begntime = "2021-04-01 00:00:00";
  142. endtime = "2021-06-30 23:59:59";
  143. break;
  144. case "2021S3":
  145. begntime = "2021-07-01 00:00:00";
  146. endtime = "2021-09-30 23:59:59";
  147. break;
  148. default:
  149. begntime = "2021-10-01 00:00:00";
  150. endtime = "2021-12-31 23:59:59";
  151. break;
  152. }
  153. List<StatisticsBySeason> list = dao.selectStatisticsBySeason(begntime, endtime);
  154. list.removeIf(itm -> StringUtil.isBlank(itm.getJBDM()));
  155. if (season.equals("2021S4")) {
  156. list.removeIf(itm -> !itm.getSFZH().startsWith("4301"));
  157. }
  158. String[] title = {"AKC190", "AKB020", "USERNAME", "ZYCS", "BAH", "XM", "XB", "CSRQ", "NL", "GJ", "XSECSTZ",
  159. "XSERYTZ", "SFZH", "ZY", "HY", "RYSJ", "CYSJ", "SJZYTS", "ZYZD", "JBDM", "LYFS", "ZFY" };
  160. String[][] content = new String[list.size()][];
  161. for (int i = 0; i < list.size(); i++) {
  162. content[i] = new String[title.length];
  163. StatisticsBySeason result = list.get(i);
  164. content[i][0] = result.getAKC190();
  165. content[i][1] = result.getAKB020();
  166. content[i][2] = result.getUSERNAME();
  167. content[i][3] = result.getZYCS();
  168. content[i][4] = result.getBAH();
  169. content[i][5] = result.getXM();
  170. content[i][6] = result.getXB();
  171. content[i][7] = result.getCSRQ();
  172. content[i][8] = result.getNL();
  173. content[i][9] = result.getGJ();
  174. content[i][10] = result.getXSECSTZ();
  175. content[i][11] = result.getXSERYTZ();
  176. content[i][12] = result.getSFZH();
  177. content[i][13] = result.getZY();
  178. content[i][14] = result.getHY();
  179. content[i][15] = result.getRYSJ();
  180. content[i][16] = result.getCYSJ();
  181. content[i][17] = result.getSJZYTS();
  182. content[i][18] = result.getZYZD();
  183. content[i][19] = result.getJBDM();
  184. content[i][20] = result.getLYFS();
  185. content[i][21] = result.getZFY();
  186. }
  187. ExcelUtil.exportExcel(response, title, content);
  188. }
  189. }