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 |   85 +++++++++++++++++++++++++++++++++++++++---
 1 files changed, 78 insertions(+), 7 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 7de4f20..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
@@ -99,6 +105,8 @@
      */
     @Override
     public List<PatMedInhosp> selectPatMedInhospList(PatMedInhosp patMedInhosp) {
+        //鍏ラ櫌搴婁綅鎺掑簭鍙湪銆屽湪闄€�嶆煡璇紙cry=0锛変笅鐢熸晥锛屽叾瀹冩煡璇竴寰嬪拷鐣ワ紝淇濊瘉鍘熸湁鎺掑簭涓嶅彉
+        patMedInhosp.setBedSort(normalizeBedSort(patMedInhosp.getCry(), patMedInhosp.getBedSort()));
         if (patMedInhosp.getCry() != null && patMedInhosp.getCry() == 0) {
             patMedInhosp.setDeptcodeList(patMedInhosp.getLeaveldeptcodes());
             patMedInhosp.setHospitaldistrictcodeList(patMedInhosp.getLeavehospitaldistrictcodes());
@@ -114,11 +122,66 @@
         }
 
         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锛堜笉鎺掑簭锛夈��
+     * 鍙銆屽湪闄€�嶆偅鑰呮煡璇紙cry=0锛夌敓鏁堬紝鍑洪櫌/杞绛夋煡璇㈠拷鐣ヨ鍙傛暟銆�
+     *
+     * @param cry     鍑哄叆闄㈡爣璇嗭細0鍏ラ櫌 1鍑洪櫌 2杞 3棰勫叆闄�
+     * @param bedSort 鍓嶇浼犲叆鐨勫簥浣嶆帓搴忓��
+     * @return 褰掍竴鍖栧悗鐨勬帓搴忓�硷紙asc / desc / null锛�
+     */
+    private String normalizeBedSort(Integer cry, String bedSort) {
+        if (cry == null || cry != 0 || StringUtils.isEmpty(bedSort)) return null;
+        String value = bedSort.trim().toLowerCase();
+        if ("asc".equals(value) || "1".equals(value)) return "asc";
+        if ("desc".equals(value) || "2".equals(value)) return "desc";
+        return null;
     }
 
     @Override
@@ -500,7 +563,9 @@
                                 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)) {
@@ -990,7 +1055,8 @@
         }
     }
 
-    private Integer addServiceSubtaskPreachform(ServiceSubtask serviceSubtask, String sendstate) {
+    @Override
+    public Integer addServiceSubtaskPreachform(ServiceSubtask serviceSubtask, String sendstate) {
         //灏唒reachformDesc鐨刯son瀵硅薄锛屾斁鍒發ist闆嗗悎涓�
         ServiceTask serviceTask = serviceTaskMapper.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
         if (Objects.isNull(serviceTask)) {
@@ -1044,6 +1110,8 @@
 //        }
         ServiceSubtask serviceSubtask = DtoConversionUtils.sourceToTarget(serviceTask, ServiceSubtask.class);
         serviceSubtask.setTaskid(serviceTask.getTaskid());
+        serviceSubtask.setOrgid(serviceTask.getOrgid());
+        serviceSubtask.setCampusid(serviceTask.getCampusid());
         if (StringUtils.isNotEmpty(serviceTask.getLibtemplateid()))
             serviceSubtask.setLibtemplateid(Long.valueOf(serviceTask.getLibtemplateid()));
         serviceSubtask.setNurseId(patMedInhosp1.getNurseId());
@@ -1155,6 +1223,8 @@
     private ServiceSubtask boxedServiceSubtaskForOp(ServiceTask serviceTask, PatMedInhosp patMedInhosp1, PatMedOperationItem patMedOperationItem, PatArchive patArchive, String config) {
         ServiceSubtask serviceSubtask = DtoConversionUtils.sourceToTarget(serviceTask, ServiceSubtask.class);
         serviceSubtask.setTaskid(serviceTask.getTaskid());
+        serviceSubtask.setOrgid(serviceTask.getOrgid());
+        serviceSubtask.setCampusid(serviceTask.getCampusid());
         if (StringUtils.isNotEmpty(serviceTask.getLibtemplateid()))
             serviceSubtask.setLibtemplateid(Long.valueOf(serviceTask.getLibtemplateid()));
         serviceSubtask.setNurseId(patMedInhosp1.getNurseId());
@@ -1297,7 +1367,8 @@
         pmoi.setOpercheckFlag("0");
         pmoi.setMainFlag("1");
 
-        List<PatMedOperationItem> patMedOperationItems = patMedOperationItemMapper.selectOperationItemList(pmoi);
+        //姣忔鏌ヨ鍙煡鏈�澶х殑鎵嬫湳绛夌骇璁板綍
+        List<PatMedOperationItem> patMedOperationItems = patMedOperationItemMapper.selectOperationItemListMaxLevel(pmoi);
         log.info("dealOutHospInfo闇�瑕佸鐞嗙殑鍑洪櫌鎵嬫湳鎮h�呬俊鎭細{}", CollectionUtils.isNotEmpty(patMedOperationItems) ? patMedOperationItems.size() : null);
 
         for (PatMedOperationItem opItem : patMedOperationItems) {

--
Gitblit v1.9.3