package thyyxxk.webserver.service.casefrontsheet; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import thyyxxk.webserver.dao.his.casefrontsheet.SheetSearchDao; import thyyxxk.webserver.entity.ResultVo; import thyyxxk.webserver.entity.casefrontsheet.StatisticsBySeason; import thyyxxk.webserver.entity.dictionary.PureCodeName; import thyyxxk.webserver.entity.dictionary.SearchDataParam; import thyyxxk.webserver.service.yibao.DictionaryService; import thyyxxk.webserver.utils.ExcelUtil; import thyyxxk.webserver.utils.ResultVoUtil; import thyyxxk.webserver.utils.StringUtil; import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; import java.util.List; /** * @author dj */ @Slf4j @Service public class SheetSearchService { private final SheetSearchDao dao; private final DictionaryService service; @Autowired public SheetSearchService(SheetSearchDao dao, DictionaryService service) { this.dao = dao; this.service = service; } public ResultVo> sheetSearch(SearchDataParam param) { final String content = '%' + param.getContent().toUpperCase() + '%'; switch (param.getTarget()) { case "surgery": return ResultVoUtil.success(searchSurgery(param.getMethod(), content, param.getPage() - 1)); case "pathologicDiag": return ResultVoUtil.success(searchPathologicDiag(param.getMethod(), content, param.getPage() - 1)); case "place": return ResultVoUtil.success(searchBirthPlace(param.getMethod(), content, param.getPage() - 1)); case "normalDiag": case "clinicdiag": return ResultVoUtil.success(searchClinicdiag(param.getMethod(), content, param.getPage() - 1)); case "hurtReason": return ResultVoUtil.success(searchHurtReason(param.getMethod(), content, param.getPage() - 1)); case "employee": return ResultVoUtil.success(searchEmployee(param.getMethod(), content, param.getPage() - 1)); case "diag": return service.searchYbDiag(param); default: return ResultVoUtil.success(new ArrayList<>()); } } private List searchSurgery(String method, String content, int page) { if (method.equals("alpha")) { method = "py_code"; } else if (method.equals("code")) { method = "surgical_operation_code"; } else { method = "operation_operation_name"; } return dao.searchSurgery(method, content, page); } private List searchClinicdiag(String method, String content, int page) { if (method.equals("alpha")) { method = "py_code"; } return dao.searchClinicdiag(method, content, page); } private List searchPathologicDiag(String method, String content, int page) { if (method.equals("alpha")) { method = "PY_CODE"; } else if (method.equals("code")) { method = "CODE"; } else { method = "NAME"; } return dao.searchPathologicDiag(method, content, page); } private List searchBirthPlace(String method, String content, int page) { if (method.equals("alpha")) { method = "py_code"; } return dao.searchBirthPlace(method, content, page); } private List searchHurtReason(String method, String content, int page) { if (method.equals("alpha")) { method = "py_code"; } return dao.searchHurtReason(method, content, page); } private List searchEmployee(String method, String content, int page) { if (method.equals("alpha")) { method = "py_code"; } return dao.searchEmployee(method, content, page); } /** * 1. 报送范围为出院日期在2019年1月1日—2021年12月31日,包括城镇职工、城乡居民基本医疗保险病人的住院数据(排除全自费、异地就医、工伤、生育保险类住院数据); * 2. NO41表以CSV文件格式提取,并按季度上传数据。单个上传文件上限为5万条病例数,如果数据量过大,也可按月度上传数据。(文件命名格式:“医疗机构名称_201901.csv”); * 3. 报送规范以《长株潭数据报送标准-附件1、2》为准,相关编码要按照贯标后报送,疾病编码、手术编码要按照医保编码2.0目录报送,AKC190、AKB020作为唯一联合主键。 * */ public void fetchStatisticsBySeason(HttpServletResponse response, String season) { String begntime, endtime; switch (season) { case "2019S1": begntime = "2019-01-01 00:00:00"; endtime = "2019-03-31 23:59:59"; break; case "2019S2": begntime = "2019-04-01 00:00:00"; endtime = "2019-06-30 23:59:59"; break; case "2019S3": begntime = "2019-07-01 00:00:00"; endtime = "2019-09-30 23:59:59"; break; case "2019S4": begntime = "2019-10-01 00:00:00"; endtime = "2019-12-31 23:59:59"; break; case "2020S1": begntime = "2020-01-01 00:00:00"; endtime = "2020-03-31 23:59:59"; break; case "2020S2": begntime = "2020-04-01 00:00:00"; endtime = "2020-06-30 23:59:59"; break; case "2020S3": begntime = "2020-07-01 00:00:00"; endtime = "2020-09-30 23:59:59"; break; case "2020S4": begntime = "2020-10-01 00:00:00"; endtime = "2020-12-31 23:59:59"; break; case "2021S1": begntime = "2021-01-01 00:00:00"; endtime = "2021-03-31 23:59:59"; break; case "2021S2": begntime = "2021-04-01 00:00:00"; endtime = "2021-06-30 23:59:59"; break; case "2021S3": begntime = "2021-07-01 00:00:00"; endtime = "2021-09-30 23:59:59"; break; default: begntime = "2021-10-01 00:00:00"; endtime = "2021-12-31 23:59:59"; break; } List list = dao.selectStatisticsBySeason(begntime, endtime); list.removeIf(itm -> StringUtil.isBlank(itm.getJBDM())); if (season.equals("2021S4")) { list.removeIf(itm -> !itm.getSFZH().startsWith("4301")); } String[] title = {"AKC190", "AKB020", "USERNAME", "ZYCS", "BAH", "XM", "XB", "CSRQ", "NL", "GJ", "XSECSTZ", "XSERYTZ", "SFZH", "ZY", "HY", "RYSJ", "CYSJ", "SJZYTS", "ZYZD", "JBDM", "LYFS", "ZFY" }; String[][] content = new String[list.size()][]; for (int i = 0; i < list.size(); i++) { content[i] = new String[title.length]; StatisticsBySeason result = list.get(i); content[i][0] = result.getAKC190(); content[i][1] = result.getAKB020(); content[i][2] = result.getUSERNAME(); content[i][3] = result.getZYCS(); content[i][4] = result.getBAH(); content[i][5] = result.getXM(); content[i][6] = result.getXB(); content[i][7] = result.getCSRQ(); content[i][8] = result.getNL(); content[i][9] = result.getGJ(); content[i][10] = result.getXSECSTZ(); content[i][11] = result.getXSERYTZ(); content[i][12] = result.getSFZH(); content[i][13] = result.getZY(); content[i][14] = result.getHY(); content[i][15] = result.getRYSJ(); content[i][16] = result.getCYSJ(); content[i][17] = result.getSJZYTS(); content[i][18] = result.getZYZD(); content[i][19] = result.getJBDM(); content[i][20] = result.getLYFS(); content[i][21] = result.getZFY(); } ExcelUtil.exportExcel(response, title, content); } }