| | |
| | | } |
| | | |
| | | List<PatMedInhosp> patMedInhospList = patMedInhospMapper.selectPatMedInhospList(patMedInhosp); |
| | | for (PatMedInhosp patMedInhosp1 : patMedInhospList) { |
| | | String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid()); |
| | | patMedInhosp1.setTagname(tagname); |
| | | } |
| | | fillTagname(patMedInhospList); |
| | | return patMedInhospList; |
| | | } |
| | | |
| | | /** |
| | | * 批量填充患者标签 |
| | | * <p> |
| | | * 原实现是每行调一次 getTagnameBypatid,SQL 往返次数随 pageSize 线性增长; |
| | | * 这里按 patid 去重后分批一次查回,结果与逐行查询完全一致(患者无标签时仍为 null)。 |
| | | * |
| | | * @param patMedInhospList 待填充的住院记录,允许为空 |
| | | */ |
| | | private void fillTagname(List<PatMedInhosp> patMedInhospList) { |
| | | if (CollectionUtils.isEmpty(patMedInhospList)) { |
| | | return; |
| | | } |
| | | // LinkedHashSet 去重同时保持顺序,避免 IN 列表出现重复 patid |
| | | Set<Long> patids = new LinkedHashSet<>(); |
| | | for (PatMedInhosp patMedInhosp : patMedInhospList) { |
| | | if (patMedInhosp.getPatid() != null) { |
| | | patids.add(patMedInhosp.getPatid()); |
| | | } |
| | | } |
| | | if (patids.isEmpty()) { |
| | | return; |
| | | } |
| | | |
| | | Map<Long, String> tagnameMap = new HashMap<>(); |
| | | List<Long> patidList = new ArrayList<>(patids); |
| | | // 分片,防止 IN 参数过多 |
| | | int batchSize = 1000; |
| | | for (int i = 0; i < patidList.size(); i += batchSize) { |
| | | List<Long> batch = patidList.subList(i, Math.min(i + batchSize, patidList.size())); |
| | | List<Map<String, Object>> rows = patMedInhospMapper.getTagnameByPatids(batch); |
| | | if (CollectionUtils.isEmpty(rows)) { |
| | | continue; |
| | | } |
| | | for (Map<String, Object> row : rows) { |
| | | Object patid = row.get("patid"); |
| | | Object tagname = row.get("tagname"); |
| | | if (patid != null) { |
| | | tagnameMap.put(((Number) patid).longValue(), tagname == null ? null : tagname.toString()); |
| | | } |
| | | } |
| | | } |
| | | |
| | | for (PatMedInhosp patMedInhosp : patMedInhospList) { |
| | | if (patMedInhosp.getPatid() != null) { |
| | | patMedInhosp.setTagname(tagnameMap.get(patMedInhosp.getPatid())); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | |
| | | pmoi.setDeptCodes(deptCodeList); |
| | | pmoi.setWardCodes(wardCodeList); |
| | | pmoi.setOpLevelCodes(opLevelCodeList); |
| | | List<PatMedOperationItem> patMedOperationItems = patMedOperationItemMapper.selectOperationItemList(pmoi); |
| | | |
| | | //每次查询只查最大的手术等级记录 |
| | | List<PatMedOperationItem> patMedOperationItems = patMedOperationItemMapper.selectOperationItemListMaxLevel(pmoi); |
| | | for (PatMedOperationItem patMedOperationItem : patMedOperationItems) { |
| | | PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedOperationItem.getPatid()); |
| | | if (Objects.isNull(patArchive)) { |
| | |
| | | pmoi.setOpercheckFlag("0"); |
| | | pmoi.setMainFlag("1"); |
| | | |
| | | List<PatMedOperationItem> patMedOperationItems = patMedOperationItemMapper.selectOperationItemList(pmoi); |
| | | //每次查询只查最大的手术等级记录 |
| | | List<PatMedOperationItem> patMedOperationItems = patMedOperationItemMapper.selectOperationItemListMaxLevel(pmoi); |
| | | log.info("dealOutHospInfo需要处理的出院手术患者信息:{}", CollectionUtils.isNotEmpty(patMedOperationItems) ? patMedOperationItems.size() : null); |
| | | |
| | | for (PatMedOperationItem opItem : patMedOperationItems) { |