From b46b8b8fee4d10e52dd882febc07974b02e2aed9 Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期二, 03 十一月 2026 14:14:18 +0800
Subject: [PATCH] 本地测试前提交:跨模块收口相关源码改动

---
 ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceSubtaskServiceImpl.java |   93 +++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 90 insertions(+), 3 deletions(-)

diff --git a/ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceSubtaskServiceImpl.java b/ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceSubtaskServiceImpl.java
index 12ad312..8548af1 100644
--- a/ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceSubtaskServiceImpl.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceSubtaskServiceImpl.java
@@ -538,9 +538,9 @@
 
     public List<ServiceSubtask> getServiceSubtasks(ServiceSubtaskEntity serviceSubtaskEntity) {
         if (serviceSubtaskEntity.getSendstateView() != null) {
-            //            1锛氬緟闅忚锛�1 琚鍙栥��2 寰呭彂閫併��3 宸插彂閫併��5 鍙戦�佸け璐ャ��7銆佽秴鏃讹級锛�2锛氬凡瀹屾垚锛� 6 宸插畬鎴愶級銆�3锛氭棤闇�闅忚锛�4 涓嶆墽琛岋級
+            //            1锛氬緟闅忚锛�1 琚鍙栥��2 寰呭彂閫併��3 宸插彂閫併��7 瓒呮椂锛涘彂閫佸け璐�(5) 鍗曠嫭缁熻锛夛紱2锛氬凡瀹屾垚锛� 6 宸插畬鎴愶級銆�3锛氭棤闇�闅忚锛�4 涓嶆墽琛岋級
             if (serviceSubtaskEntity.getSendstateView() == 1)
-                serviceSubtaskEntity.setSendstates(new ArrayList<>(Arrays.asList(1L, 2L, 3L, 5L, 7L)));
+                serviceSubtaskEntity.setSendstates(new ArrayList<>(Arrays.asList(1L, 2L, 3L, 7L)));
             if (serviceSubtaskEntity.getSendstateView() == 2)
                 serviceSubtaskEntity.setSendstates(new ArrayList<>(Arrays.asList(6L)));
             if (serviceSubtaskEntity.getSendstateView() == 3)
@@ -809,6 +809,50 @@
     }
 
     /**
+     * 缁熶竴銆岄殢璁跨梾鍖恒�嶅彛寰勶細涓�寰嬩互銆愬嚭闄㈣褰曘�憑@code pat_med_inhosp} 涓哄噯锛�2026-10-29 涓氬姟纭锛夈��
+     *
+     * <h3>涓轰粈涔堥渶瑕佸畠</h3>
+     * 鍑洪櫌闅忚瀛愪换鍔$殑绉戝/鐥呭尯鏈簲鏉ヨ嚜鍑洪櫌璁板綍锛屼絾銆屽啀娆¢殢璁� / 鎵嬪伐鏂板銆嶈繖涓や釜鍏ュ彛鏄�
+     * <b>鐩存帴鎸夊墠绔紶鏉ョ殑瀛楁钀藉簱</b>鐨勶細鍓嶇涓嶅甫杩欎簺瀛楁鏃�
+     * {@code leaveldeptcode} / {@code leavehospitaldistrictcode} / {@code campusid} 灏辨槸绌恒��
+     * 鑰岄殢璁垮垪琛ㄦ槸鎸夌瀹�/鐥呭尯杩囨护鐨勶紙{@code and leavehospitaldistrictcode = #{...}}锛夛紝
+     * 绌哄�间笉鍖归厤浠讳綍鍊� 鈫� 杩欎簺浠诲姟"鐢熸垚浜嗕絾椤甸潰涓婃煡涓嶅埌"锛堢嚎涓� 2026-10 瀹炴祴 314 鏉★級銆�
+     *
+     * <p>鍙e緞锛�<b>鐥呭尯鍙鍑洪櫌璁板綍</b> 鈥斺�� 涓嶆寜鎮h�呮。妗堝弽鎺ㄣ�佷篃涓嶇敤鍓嶇浼犵殑鍊笺��
+     * 鍙鍑洪櫌闅忚锛坽@code service_type='2'}锛変笖鑳藉畾浣嶅埌鍑洪櫌璁板綍锛坽@code inhospid} 闈炵┖锛夌殑琛岀敓鏁堬紱
+     * 鍏朵綑鎯呭喌鍘熸牱鏀捐锛屽婊℃剰搴�(6)/瀹f暀/闂ㄨ瘖绛夊叾瀹冪被鍨嬫病鏈変换浣曞奖鍝嶃��
+     *
+     * @param serviceSubtask 寰呰惤搴撶殑瀛愪换鍔★紙灏卞湴淇敼锛�
+     */
+    private void alignDischargeWardFromInhosp(ServiceSubtask serviceSubtask) {
+        if (serviceSubtask == null || serviceSubtask.getInhospid() == null) {
+            return;
+        }
+        if (!"2".equals(serviceSubtask.getServiceType())) {
+            return;
+        }
+        PatMedInhosp inhosp;
+        try {
+            inhosp = inhospVisitFacade.selectPatMedInhospByInhospid(serviceSubtask.getInhospid());
+        } catch (Exception e) {
+            log.warn("銆愰殢璁夸换鍔°�戞寜 inhospid={} 鍙栧嚭闄㈣褰曞け璐ワ紝鐥呭尯娌跨敤鍏ュ弬锛歿}",
+                    serviceSubtask.getInhospid(), e.toString());
+            return;
+        }
+        if (inhosp == null) {
+            log.warn("銆愰殢璁夸换鍔°�慽nhospid={} 鏌ヤ笉鍒板嚭闄㈣褰曪紝鐥呭尯娌跨敤鍏ュ弬", serviceSubtask.getInhospid());
+            return;
+        }
+        serviceSubtask.setLeaveldeptcode(inhosp.getLeaveldeptcode());
+        serviceSubtask.setLeaveldeptname(inhosp.getLeaveldeptname());
+        serviceSubtask.setLeavehospitaldistrictcode(inhosp.getLeavehospitaldistrictcode());
+        serviceSubtask.setLeavehospitaldistrictname(inhosp.getLeavehospitaldistrictname());
+        if (StringUtils.isNotEmpty(inhosp.getCampusid())) {
+            serviceSubtask.setCampusid(inhosp.getCampusid());
+        }
+    }
+
+    /**
      * 鏂板鍗曚竴浠诲姟锛堥殢璁匡級
      *
      * @param serviceSubtask 鍗曚竴浠诲姟锛堥殢璁匡級
@@ -850,6 +894,8 @@
             }
 
             serviceSubtask.setCreateTime(DateUtils.getNowDate());
+            // 鍙e緞锛�2026-10-29 涓氬姟纭锛夛細鍑洪櫌闅忚鐨勭瀹�/鐥呭尯涓�寰嬩互鍑洪櫌璁板綍涓哄噯
+            alignDischargeWardFromInhosp(serviceSubtask);
             serviceSubtaskMapper.insertServiceSubtask(serviceSubtask);
             //淇敼浣忛櫌婊℃剰搴︾姸鎬侊紙閬垮厤閲嶅鏌ヨ锛�
             if (serviceSubtask.getServiceType() != null && "6".equals(serviceSubtask.getServiceType())) {
@@ -943,6 +989,13 @@
         serviceSubtask2.setVisitType(serviceSubtask.getVisitType());
         serviceSubtask2.setVisitDeptCode(serviceSubtask.getVisitDeptCode());
         serviceSubtask2.setVisitDeptName(serviceSubtask.getVisitDeptName());
+        // 鍙e緞锛�2026-10-29 涓氬姟纭锛夛細闅忚鐥呭尯涓�寰嬪彇鍑洪櫌璁板綍鐨�
+        //   鈶� 鍐嶆闅忚鏄粠璇锋眰 DTO 澶嶅埗鍑烘潵鐨勶紝鍑洪櫌璁板綍ID 涓嶅湪璇锋眰閲� 鈫� 鍏堢敤鍘熶换鍔$殑涓婏紱
+        //   鈶� 鍐嶆寜鍑洪櫌璁板綍鎶婄瀹�/鐥呭尯/闄㈠尯缁熶竴杩囨潵锛堝彇涓嶅埌灏变繚鎸佷笉鍙橈級銆�
+        if (serviceSubtask2.getInhospid() == null) {
+            serviceSubtask2.setInhospid(serviceSubtask1.getInhospid());
+        }
+        alignDischargeWardFromInhosp(serviceSubtask2);
         int i = serviceSubtaskMapper.insertServiceSubtask(serviceSubtask2);
         if (i == 1) {
             //鏂板鎴愬姛鍚庯紝闇�瑕佸皢涔嬪墠鐨勪换鍔¤缃负涓嶈鍐嶉殢璁匡紙闃叉閲嶅鐐癸紝鐒跺悗閲嶅鐢熸垚锛�
@@ -3206,6 +3259,20 @@
         serviceSubtaskCountReq.setGroupKey(groupKey);
         // 鍒嗙粍鍒椾笌杩囨护鍒椾繚鎸佷竴鑷达細绂婚櫌绉戝 leaveldeptcode銆佸湪闄㈢瀹� deptcode
         serviceSubtaskCountReq.setGroupColumn(groupKey);
+        /*
+         * 婊℃剰搴︺�岀梾鍖虹粺璁°�嶏紙绂婚櫌缁村害锛夛細鍑洪櫌鐥呭尯涓虹┖鍒欏洖閫�鍒板湪闄㈢梾鍖恒��
+         * 婊℃剰搴﹀瓙浠诲姟锛坰ervice_type 6/14/15/16锛夌殑 leavehospitaldistrictcode 绾︿笁鎴愪负绌猴紝
+         * 涔嬪墠涓轰簡鈥滄煡寰楀埌鏁版嵁鈥濇妸鐥呭尯鏉′欢鍐欐垚 `xxx IS NULL OR xxx IN (...)`锛�
+         * 浜庢槸閫変簡 A 鐥呭尯涔熶細鎶婄┖鐥呭尯鐨勫叏閲忔暟鎹甫杩涙潵锛屽啀缁熶竴褰掑埌 'Unknown' 缁勶紝
+         * 璇ョ粍鐨勭梾鍖哄悕鍙堟槸 MAX(hospitaldistrictname) 闅忎究鎸戠殑 鈥斺�� 琛ㄧ幇灏辨槸
+         * 鈥滈�変簡琛�娑插唴绉戠梾鍖猴紝鍗存煡鍑轰竴琛屾樉绀洪绉戜腑蹇冧笁鐥呭尯鈥濄��
+         * 鐢ㄢ�滄湁鏁堢梾鍖衡�濆垪杩囨护 + 鍒嗙粍鍚庯細绛涢�夌湡姝g敓鏁堬紝绌虹梾鍖虹殑璁板綍涔熷洖鍒板畠鐪熷疄鐨勫湪闄㈢梾鍖恒��
+         */
+        if ("leavehospitaldistrictcode".equals(groupKey)) {
+            String districtColumn = "IFNULL(leavehospitaldistrictcode, hospitaldistrictcode)";
+            serviceSubtaskCountReq.setGroupColumn(districtColumn);
+            serviceSubtaskCountReq.setDistrictColumn(districtColumn);
+        }
         //鍒嗙粍閿泦鍚堬細杩欎竴姝ヤ繚鎸佷笉鍙橈紙鍒嗛〉鍙傛暟鐓ф棫浣滅敤鍦ㄨ鏌ヨ涓婏級锛屼繚璇佲�滃弬涓庣粺璁$殑鍒嗙粍鈥濅笌鏀归�犲墠涓�鑷�
         List<String> groupKeyList = serviceSubtaskMapper.getSfStatisticsGroupKey(serviceSubtaskCountReq);
         /*
@@ -3280,6 +3347,24 @@
             serviceSubtaskStatistics.add(statistic);
         }
 
+        /*
+         * 鐥呭尯缁熻锛氳繖涓�琛岀殑鐥呭尯灏辨槸鍒嗙粍閿湰韬紝灞曠ず鍚嶅彇璇ョ粍鑷繁鐨勭梾鍖哄悕銆�
+         * 鑱氬悎 SQL 閲屽師鏉ョ殑 MAX(hospitaldistrictname) 鍦ㄢ�滀竴涓粍娣蜂簡澶氫釜鐥呭尯鈥濇椂浼氭寫鍑�
+         * 涓�涓涓嶇浉骞茬殑鐥呭尯鍚嶏紙閫夎娑插唴绉戠梾鍖烘樉绀烘垚楠ㄧ涓績涓夌梾鍖哄氨鏄繖涔堟潵鐨勶級銆�
+         * 杩欓噷鎶婂垎缁勯敭鍥炲~鍒板湪闄�/绂婚櫌涓ゅ鐥呭尯瀛楁锛屼繚璇佸墠绔笉璁鸿鍝竴鍒楅兘鏄悓涓�涓梾鍖猴紝
+         * 涔熻鈥滄煡鐪嬭鎯呪�濆甫涓婃潵鐨勭梾鍖虹紪鐮佽兘鏌ュ洖鍚屼竴鎵规暟鎹��
+         */
+        if (StringUtils.isNotEmpty(serviceSubtaskCountReq.getDistrictColumn())) {
+            for (ServiceSubtaskStatistic statistic : serviceSubtaskStatistics) {
+                String districtCode = statistic.getGroupCode() == null ? "Unknown" : statistic.getGroupCode();
+                String districtName = StringUtils.isNotEmpty(statistic.getGroupName()) ? statistic.getGroupName() : districtCode;
+                statistic.setLeavehospitaldistrictcode(districtCode);
+                statistic.setLeavehospitaldistrictname(districtName);
+                statistic.setHospitaldistrictcode(districtCode);
+                statistic.setHospitaldistrictname(districtName);
+            }
+        }
+
         //鑾峰彇鍙婃椂鐜囩粺璁″悎闆嗭紙涓�娆℃壒閲忔煡璇紝涓嶆寜鍒嗙粍寰幆鏌ワ級
         Map<String, Map<String, Object>> jsRates = getSsRateForSfStatistics(serviceSubtaskCountReq, statisticsGroupKeys);
         for (ServiceSubtaskStatistic statistic : serviceSubtaskStatistics) {
@@ -3309,7 +3394,9 @@
                     sum = new BigDecimal(serviceSubtaskStatistic.getJoyAllCount());
                 }
                 if (sum.intValue() != 0) {
-                    finishedPercentage = finishedSum.divide(sum, 2, RoundingMode.HALF_UP).doubleValue();
+                    // 鍘熸潵鍙繚鐣� 2 浣嶅皬鏁帮紙23634/26106 浼氳鎴垚 0.91锛夛紝鍓嶇鍐� 脳100
+                    // 灏辨樉绀烘垚 91.00%锛屼笌瀹為檯鐨� 90.53% 宸簡鍗婁釜鐧惧垎鐐广�傝繖閲屼繚鐣� 4 浣嶃��
+                    finishedPercentage = finishedSum.divide(sum, 4, RoundingMode.HALF_UP).doubleValue();
                 }
                 serviceSubtaskStatistic.setJoyAllCount(sum.intValue());
                 serviceSubtaskStatistic.setJoyCount(finishedSum.intValue());

--
Gitblit v1.9.3