From 132cb0d089c7734f3eb3e858bd741fbc60dbdc9d Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期二, 20 一月 2026 16:46:25 +0800
Subject: [PATCH] 【丽水】获取随访统计比例 查询优化

---
 smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java |   67 ++++++++++++++++++++-------------
 1 files changed, 40 insertions(+), 27 deletions(-)

diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
index ee3ab44..f98f258 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
@@ -231,7 +231,8 @@
         } catch (JsonProcessingException e) {
             e.printStackTrace();
         }
-
+        List<ServiceSubtaskPreachform> serviceSubtaskPreachformLists =
+                    serviceSubtaskPreachformMapper.selectBySubtask(serviceSubtask);
         for (ServiceSubtask serviceSubtask1 : list) {
             PatTaskRelevance patTaskRelevance = new PatTaskRelevance();
             if (!serviceSubtask1.getHospType().equals("2")) {
@@ -288,10 +289,9 @@
             }
 
             //鑾峰彇璇ユ偅鑰呮墍鏈夌殑鎵ц鐘舵��
-            ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform();
-            serviceSubtaskPreachform.setTaskid(serviceTask.getTaskid());
-            serviceSubtaskPreachform.setSubid(serviceSubtask1.getId());
-            List<ServiceSubtaskPreachform> serviceSubtaskPreachformList = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
+            List<ServiceSubtaskPreachform> serviceSubtaskPreachformList =
+                serviceSubtaskPreachformLists.stream().filter((item -> item.getSubid().equals(serviceSubtask1.getId())
+                            && item.getTaskid().equals(serviceTask.getTaskid()))).collect(Collectors.toList());
             List<Map<String, Object>> resultList = serviceSubtaskPreachformList.stream().map(item -> {
                 Map<String, Object> map = new HashMap<>();
                 map.put("sort", item.getSort());
@@ -2230,24 +2230,25 @@
     public List<ServiceSubtaskStatistic> getSfStatistics(ServiceSubtaskCountReq serviceSubtaskCountReq) {
         log.info("getSfStatistics鐨勫叆鍙備负锛歿}", serviceSubtaskCountReq);
         List<ServiceSubtaskStatistic> serviceSubtaskStatistics = new ArrayList<>();
-//        List<ServiceSubtask> rawData = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq);
+        List<ServiceSubtask> rawData = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq);
 
         // 鏍规嵁鏉′欢杩涜鍒嗙粍
         Map<String, List<ServiceSubtask>> collect = new HashMap<>();
 
         if (serviceSubtaskCountReq.getLeavehospitaldistrictcodes() != null && serviceSubtaskCountReq.getLeavehospitaldistrictcodes().size() > 0) {
             if (serviceSubtaskCountReq.getDrcode() != null && !serviceSubtaskCountReq.getDrcode().isEmpty()) {
-                collect = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq).stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getDrname()).orElse("Unknown")));
+                collect = rawData.stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getDrname()).orElse("Unknown")));
             } else {
-                collect = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq).stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getLeavehospitaldistrictname()).orElse("Unknown")));
+                collect = rawData.stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getLeavehospitaldistrictname()).orElse("Unknown")));
             }
         } else if (serviceSubtaskCountReq.getDeptcodes() != null && serviceSubtaskCountReq.getDeptcodes().size() > 0) {
             if (serviceSubtaskCountReq.getDrcode() != null && !serviceSubtaskCountReq.getDrcode().isEmpty()) {
-                collect = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq).stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getDrname()).orElse("Unknown")));
+                collect = rawData.stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getDrname()).orElse("Unknown")));
             } else {
-                collect = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq).stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getDeptname()).orElse("Unknown")));
+                collect = rawData.stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getDeptname()).orElse("Unknown")));
             }
         }
+
 
         for (List<ServiceSubtask> serviceSubtaskList : collect.values()) {
             if (CollectionUtils.isEmpty(serviceSubtaskList)) {
@@ -2566,18 +2567,24 @@
                 } else {
                     serviceSubtaskStatistic.setFollowUpRate("0.00%");
                 }
-                //棣栨闅忚浜哄伐
-                if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("1")) {
+                //棣栨闅忚浜哄伐 (涓嶇粺璁′笉鎵ц)
+                if (serviceSubtask.getSendstate() != null
+                        && !serviceSubtask.getSendstate().equals(4L)
+                        && serviceSubtask.getPreachform().equals("1")) {
                     serviceSubtaskStatistic.setManual(serviceSubtaskStatistic.getManual() + 1L);
                     manualInfo.add(serviceSubtask);
                 }
-                //棣栨闅忚鐭俊
-                if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("4")) {
+                //棣栨闅忚鐭俊(涓嶇粺璁′笉鎵ц)
+                if (serviceSubtask.getSendstate() != null
+                        && !serviceSubtask.getSendstate().equals(4L)
+                        && serviceSubtask.getPreachform().equals("4")) {
                     serviceSubtaskStatistic.setSms(serviceSubtaskStatistic.getSms() + 1L);
                     smsInfo.add(serviceSubtask);
                 }
-                //棣栨闅忚寰俊
-                if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("5")) {
+                //棣栨闅忚寰俊(涓嶇粺璁′笉鎵ц)
+                if (serviceSubtask.getSendstate() != null
+                        && !serviceSubtask.getSendstate().equals(4L)
+                        && serviceSubtask.getPreachform().equals("5")) {
                     serviceSubtaskStatistic.setWeChat(serviceSubtaskStatistic.getWeChat() + 1L);
                     wechatInfo.add(serviceSubtask);
                 }
@@ -2613,18 +2620,24 @@
                 } else {
                     serviceSubtaskStatistic.setFollowUpRateAgain("0.00%");
                 }
-                //鍐嶆闅忚浜哄伐
-                if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("1")) {
+                //鍐嶆闅忚浜哄伐(涓嶇粺璁′笉鎵ц)
+                if (serviceSubtask.getSendstate() != null
+                        && !serviceSubtask.getSendstate().equals(4L)
+                        && serviceSubtask.getPreachform().equals("1")) {
                     serviceSubtaskStatistic.setManualAgain(serviceSubtaskStatistic.getManualAgain() + 1L);
                     manualAgainInfo.add(serviceSubtask);
                 }
-                //鍐嶆闅忚鐭俊
-                if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("4")) {
+                //鍐嶆闅忚鐭俊(涓嶇粺璁′笉鎵ц)
+                if (serviceSubtask.getSendstate() != null
+                        && !serviceSubtask.getSendstate().equals(4L)
+                        && serviceSubtask.getPreachform().equals("4")) {
                     serviceSubtaskStatistic.setSmsAgain(serviceSubtaskStatistic.getSmsAgain() + 1L);
                     smsAgainInfo.add(serviceSubtask);
                 }
-                //鍐嶆闅忚寰俊
-                if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("5")) {
+                //鍐嶆闅忚寰俊(涓嶇粺璁′笉鎵ц)
+                if (serviceSubtask.getSendstate() != null
+                        && !serviceSubtask.getSendstate().equals(4L)
+                        && serviceSubtask.getPreachform().equals("5")) {
                     serviceSubtaskStatistic.setWeChatAgain(serviceSubtaskStatistic.getWeChatAgain() + 1L);
                     wechatAgainInfo.add(serviceSubtask);
                 }
@@ -3069,7 +3082,7 @@
      * @return
      */
     @Override
-    @Cacheable(value = "sfStatisticsJoy", key = "T(org.springframework.util.DigestUtils).md5DigestAsHex(#serviceSubtaskCountReq.toString().getBytes())", unless = "#result == null or #result.isEmpty()")
+    @Cacheable(value = "getSfStatisticsScript", key = "T(org.springframework.util.DigestUtils).md5DigestAsHex(#serviceSubtaskCountReq.toString().getBytes())", unless = "#result == null or #result.isEmpty()")
     public List<ServiceSubtaskStatistic> getSfStatisticsScript(ServiceSubtaskCountReq serviceSubtaskCountReq) {
         log.error("getSfStatisticsScript鐨勫叆鍙備负锛歿}", serviceSubtaskCountReq);
         List<ServiceSubtaskStatistic> serviceSubtaskStatistics = new ArrayList<>();
@@ -3132,12 +3145,12 @@
                 BigDecimal finishedSum = new BigDecimal(0);
                 //瀹屾垚姣斾緥
                 Double finishedPercentage = null;
-                if(ObjectUtils.isNotEmpty(serviceSubtaskStatistic.getJoyAllCount())){
-                    finishedSum = new BigDecimal(serviceSubtaskStatistic.getJoyAllCount());
+                if(ObjectUtils.isNotEmpty(serviceSubtaskStatistic.getJoyCount())){
+                    finishedSum = new BigDecimal(serviceSubtaskStatistic.getJoyCount());
                 }
 
-                if(ObjectUtils.isNotEmpty(serviceSubtaskStatistic.getJoyCount())){
-                    sum = new BigDecimal(serviceSubtaskStatistic.getJoyCount());
+                if(ObjectUtils.isNotEmpty(serviceSubtaskStatistic.getJoyAllCount())){
+                    sum = new BigDecimal(serviceSubtaskStatistic.getJoyAllCount());
                 }
                 if(sum.intValue() != 0){
                     finishedPercentage = finishedSum.divide(sum, 2, RoundingMode.HALF_UP).doubleValue();

--
Gitblit v1.9.3