From d7e3192804fca756d881af360ffd5eea157ef9ad Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期三, 21 十月 2026 15:45:18 +0800
Subject: [PATCH] 【市一】电话挂断服务

---
 smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java |   51 +++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 47 insertions(+), 4 deletions(-)

diff --git a/smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
index d30b56e..4511145 100644
--- a/smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
@@ -37,6 +37,12 @@
 @Slf4j
 @Service
 public class PatMedInhospServiceImpl implements IPatMedInhospService {
+
+    /**
+     * 鎵归噺鏌ユ爣绛炬椂鍗曟 IN 鐨勬渶澶т釜鏁�
+     */
+    private static final int TAG_QUERY_BATCH_SIZE = 500;
+
     @Autowired
     private PatMedInhospMapper patMedInhospMapper;
     @Autowired
@@ -116,14 +122,51 @@
         }
 
         List<PatMedInhosp> patMedInhospList = patMedInhospMapper.selectPatMedInhospList(patMedInhosp);
-        for (PatMedInhosp patMedInhosp1 : patMedInhospList) {
-            String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid());
-            patMedInhosp1.setTagname(tagname);
-        }
+        fillTagnames(patMedInhospList);
         return patMedInhospList;
     }
 
     /**
+     * 鎵归噺鍥炲~鎮h�呮爣绛俱��
+     * <p>
+     * 鍘熸潵鏄嬁鍒板垪琛ㄥ悗閫愯璋冪敤 getTagnameBypatid锛屽睘浜庡吀鍨嬬殑 N+1锛氬垎椤� 10 鏉″氨鏄� 10 娆℃煡璇紝
+     * 闈炲垎椤佃皟鐢紙瀵煎嚭銆佸畾鏃朵换鍔★級鍑犲崈鏉″氨鏄嚑鍗冩鏌ヨ銆傝繖閲屾敼鎴愭寜 patid 鍘婚噸鍚庡垎鎵� IN 鏌ヨ锛�
+     * 涓�鎵规渶澶� {@link #TAG_QUERY_BATCH_SIZE} 涓紝閬垮厤 IN 鍒楄〃杩囬暱銆�
+     *
+     * @param patMedInhospList 寰呭洖濉殑浣忛櫌璁板綍鍒楄〃
+     */
+    private void fillTagnames(List<PatMedInhosp> patMedInhospList) {
+        if (CollectionUtils.isEmpty(patMedInhospList)) {
+            return;
+        }
+        List<Long> patids = patMedInhospList.stream()
+                .map(PatMedInhosp::getPatid)
+                .filter(Objects::nonNull)
+                .distinct()
+                .collect(Collectors.toList());
+        if (patids.isEmpty()) {
+            return;
+        }
+
+        Map<Long, String> tagMap = new HashMap<>(patids.size());
+        for (int i = 0; i < patids.size(); i += TAG_QUERY_BATCH_SIZE) {
+            List<Long> batch = patids.subList(i, Math.min(i + TAG_QUERY_BATCH_SIZE, patids.size()));
+            List<PatArchivetag> tags = patMedInhospMapper.selectTagnameByPatids(batch);
+            if (CollectionUtils.isEmpty(tags)) {
+                continue;
+            }
+            for (PatArchivetag tag : tags) {
+                if (tag.getPatid() != null) {
+                    tagMap.put(tag.getPatid(), tag.getTagname());
+                }
+            }
+        }
+        for (PatMedInhosp patMedInhosp : patMedInhospList) {
+            patMedInhosp.setTagname(tagMap.get(patMedInhosp.getPatid()));
+        }
+    }
+
+    /**
      * 褰掍竴鍖栧叆闄㈠簥浣嶆帓搴忓弬鏁�
      * <p>
      * asc / 1 -> asc锛堝簥浣嶆搴忥級锛宒esc / 2 -> desc锛堝簥浣嶅�掑簭锛夛紝鍏朵綑锛堝惈涓嶄紶锛�-> null锛堜笉鎺掑簭锛夈��

--
Gitblit v1.9.3