From 459aa78c84cf552ebea6ef056d978c2531d71ac8 Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期五, 06 三月 2026 17:14:27 +0800
Subject: [PATCH] 代码提交

---
 smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java |  458 +++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 287 insertions(+), 171 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 82e5bc9..44461fa 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
@@ -1,5 +1,6 @@
 package com.smartor.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson2.JSON;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.JsonNode;
@@ -12,6 +13,7 @@
 import com.smartor.common.FtpService;
 import com.smartor.config.PhoneUtils;
 import com.smartor.domain.*;
+import com.smartor.domain.entity.ServiceSubtaskEntity;
 import com.smartor.mapper.*;
 import com.smartor.service.*;
 import com.sun.org.apache.bcel.internal.generic.NEW;
@@ -167,27 +169,27 @@
     /**
      * 鏌ヨ鍗曚竴浠诲姟锛堥殢璁匡級鍒楄〃
      *
-     * @param serviceSubtaskVO 鍗曚竴浠诲姟锛堥殢璁匡級
+     * @param serviceSubtaskEntity 鍗曚竴浠诲姟锛堥殢璁匡級
      * @return 鍗曚竴浠诲姟锛堥殢璁匡級
      */
     @Override
-    public List<ServiceSubtask> selectServiceSubtaskList(ServiceSubtaskVO serviceSubtaskVO) {
-        return serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO);
+    public List<ServiceSubtask> selectServiceSubtaskList(ServiceSubtaskEntity serviceSubtaskEntity) {
+        return serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskEntity);
     }
 
-    public List<ServiceSubtask> selectServiceSubtaskListAgain(ServiceSubtaskVO serviceSubtaskVO) {
-        return serviceSubtaskMapper.selectServiceSubtaskListAgain(serviceSubtaskVO);
+    public List<ServiceSubtask> selectServiceSubtaskListAgain(ServiceSubtaskEntity serviceSubtaskEntity) {
+        return serviceSubtaskMapper.selectServiceSubtaskListAgain(serviceSubtaskEntity);
     }
 
     @Override
     public ServiceTaskVO queryTaskByCondition(ServiceSubtask serviceSubtask) {
         //瀹氫箟鎮h�呬笌鍗曚竴浠诲姟鍏宠仈琛ㄩ泦鍚�
         List<PatTaskRelevance> patTaskRelevances = new ArrayList<>();
-        ServiceSubtaskVO serviceSubtaskVO = DtoConversionUtils.sourceToTarget(serviceSubtask, ServiceSubtaskVO.class);
+        ServiceSubtaskEntity serviceSubtaskVO = DtoConversionUtils.sourceToTarget(serviceSubtask, ServiceSubtaskEntity.class);
         List<ServiceSubtask> list = selectServiceSubtaskList(serviceSubtaskVO);
 
         ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
-        if(ObjectUtils.isEmpty(serviceTask)){
+        if (ObjectUtils.isEmpty(serviceTask)) {
             log.error("鎵句笉鍒板搴旂殑serviceTask, orgid锛歿}, taskid: {}", serviceSubtask.getOrgid(), serviceSubtask.getTaskid());
             return null;
         }
@@ -231,8 +233,7 @@
         } catch (JsonProcessingException e) {
             e.printStackTrace();
         }
-        List<ServiceSubtaskPreachform> serviceSubtaskPreachformLists =
-                    serviceSubtaskPreachformMapper.selectBySubtask(serviceSubtask);
+        List<ServiceSubtaskPreachform> serviceSubtaskPreachformLists = serviceSubtaskPreachformMapper.selectBySubtask(serviceSubtask);
         for (ServiceSubtask serviceSubtask1 : list) {
             PatTaskRelevance patTaskRelevance = new PatTaskRelevance();
             if (!serviceSubtask1.getHospType().equals("2")) {
@@ -289,9 +290,7 @@
             }
 
             //鑾峰彇璇ユ偅鑰呮墍鏈夌殑鎵ц鐘舵��
-            List<ServiceSubtaskPreachform> serviceSubtaskPreachformList =
-                serviceSubtaskPreachformLists.stream().filter((item -> item.getSubid().equals(serviceSubtask1.getId())
-                            && item.getTaskid().equals(serviceTask.getTaskid()))).collect(Collectors.toList());
+            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());
@@ -310,17 +309,23 @@
     }
 
     @Override
-    public List<ServiceSubtask> patItem(ServiceSubtaskVO serviceSubtaskVO) {
-        List<ServiceSubtask> selectServiceSubtaskList = this.selectServiceSubtaskList(serviceSubtaskVO);
-        return selectServiceSubtaskList;
+    public List<ServiceSubtaskRes> patItem(ServiceSubtaskEntity serviceSubtaskEntity) {
+        List<ServiceSubtask> selectServiceSubtaskList = this.selectServiceSubtaskList(serviceSubtaskEntity);
+
+        List<ServiceSubtaskRes> serviceSubtaskResList = new ArrayList<>();
+        for (ServiceSubtask serviceSubtask : selectServiceSubtaskList) {
+            ServiceSubtaskRes serviceSubtaskRes = DtoConversionUtils.sourceToTarget(serviceSubtask, ServiceSubtaskRes.class);
+            serviceSubtaskRes.setContinueContent(JSONObject.parseObject(serviceSubtask.getContinueContent()));
+        }
+        return serviceSubtaskResList;
     }
 
     @Override
-    public List<ServiceSubtask> patItem2(ServiceSubtaskVO serviceSubtaskVO) {
+    public List<ServiceSubtask> patItem2(ServiceSubtaskEntity serviceSubtaskEntity) {
         List<ServiceSubtask> serviceSubtaskList = new ArrayList<>();
-        for (Long sendstate : serviceSubtaskVO.getSendstates()) {
-            serviceSubtaskVO.setSendstate(sendstate);
-            List<ServiceSubtask> serviceSubtasks = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO);
+        for (Long sendstate : serviceSubtaskEntity.getSendstates()) {
+            serviceSubtaskEntity.setSendstate(sendstate);
+            List<ServiceSubtask> serviceSubtasks = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskEntity);
             serviceSubtaskList.addAll(serviceSubtasks);
         }
         return serviceSubtaskList;
@@ -370,15 +375,15 @@
      * 2. 鎬ц兘鎻愬崌 10-100 鍊嶏紙鍙栧喅浜庢暟鎹噺锛�
      * 3. 闄嶄綆鍐呭瓨鍗犵敤鍜岀綉缁滀紶杈�
      *
-     * @param serviceSubtaskVO 鏌ヨ鏉′欢
+     * @param serviceSubtaskEntity 鏌ヨ鏉′欢
      * @return 鍚勭姸鎬佺粺璁$粨鏋�
      */
     @Override
-    public Map<String, Object> patItemCount(ServiceSubtaskVO serviceSubtaskVO) {
+    public Map<String, Object> patItemCount(ServiceSubtaskEntity serviceSubtaskEntity) {
         // 鐩存帴璋冪敤鏁版嵁搴撶粺璁℃柟娉曪紝鍦ㄦ暟鎹簱灞傚畬鎴愯仛鍚堣绠�
-        Map<String, Object> result = serviceSubtaskMapper.countByCondition(serviceSubtaskVO);
+        Map<String, Object> result = serviceSubtaskMapper.countByCondition(serviceSubtaskEntity);
         // 澶勭悊绌哄紓甯�
-        if(MapUtils.isEmpty(result)){
+        if (MapUtils.isEmpty(result)) {
             result = new HashMap<>();
         }
         // 纭繚鎵�鏈� key 閮芥湁鍊硷紝閬垮厤绌烘寚閽堝紓甯�
@@ -386,6 +391,7 @@
         result.putIfAbsent("wzx", 0);
         result.putIfAbsent("ysf", 0);
         result.putIfAbsent("yc", 0);
+        result.putIfAbsent("jg", 0);
         result.putIfAbsent("fssb", 0);
         result.putIfAbsent("yfs", 0);
         result.putIfAbsent("blq", 0);
@@ -423,18 +429,18 @@
 
         if (patMedInhospList.size() > 0) {
             serviceSubtask1.setIsVisitAgain(2);
-            serviceSubtask1.setRemark(serviceSubtask1.getRemark()+";鎮h�呭啀鍏ラ櫌浜�");
+            serviceSubtask1.setRemark(serviceSubtask1.getRemark() + ";鎮h�呭啀鍏ラ櫌浜�");
             serviceSubtaskMapper.updateServiceSubtask(serviceSubtask1);
             return "鏃犻渶鍐嶆闅忚锛屾偅鑰呭啀鍏ラ櫌浜�";
         } else if (serviceSubtask1.getSendstate() == 4L) {
             serviceSubtask1.setIsVisitAgain(2);
-            serviceSubtask1.setRemark(serviceSubtask1.getRemark()+";鏃犻渶鍐嶆闅忚锛屼换鍔¤鏍囪涓嶅湪鎵ц");
+            serviceSubtask1.setRemark(serviceSubtask1.getRemark() + ";鏃犻渶鍐嶆闅忚锛屼换鍔¤鏍囪涓嶅湪鎵ц");
             serviceSubtaskMapper.updateServiceSubtask(serviceSubtask1);
             return "鏃犻渶鍐嶆闅忚锛屼换鍔¤鏍囪涓嶅湪鎵ц";
         } else if (StringUtils.isNotEmpty(patArchive.getNotrequiredFlag()) && patArchive.getNotrequiredFlag().equals("1")) {
             serviceSubtask1.setIsVisitAgain(2);
             serviceSubtaskMapper.updateServiceSubtask(serviceSubtask1);
-            serviceSubtask1.setRemark(serviceSubtask1.getRemark()+";鏃犻渶鍐嶆闅忚锛屾偅鑰呰鏍囪涓嶉渶瑕佽鏈嶅姟");
+            serviceSubtask1.setRemark(serviceSubtask1.getRemark() + ";鏃犻渶鍐嶆闅忚锛屾偅鑰呰鏍囪涓嶉渶瑕佽鏈嶅姟");
             return "鏃犻渶鍐嶆闅忚锛屾偅鑰呰鏍囪涓嶉渶瑕佽鏈嶅姟";
         } else if (ObjectUtils.isNotEmpty(serviceSubtask1.getIsVisitAgain()) && serviceSubtask1.getIsVisitAgain() == 2) {
             return "鏃犻渶鍐嶆闅忚锛岃浠诲姟宸茬粡鍐嶆闅忚杩囦簡";
@@ -670,6 +676,11 @@
                     serviceSubtask.setEndtime(patTaskRelevance.getEndtime());
                     serviceSubtask.setNurseId(patTaskRelevance.getNurseId());
                     serviceSubtask.setNurseName(patTaskRelevance.getNurseName());
+                    serviceSubtask.setContinueContent(ObjectUtils.isNotEmpty(patTaskRelevance.getContinueContent()) ? patTaskRelevance.getContinueContent().toString() : null);
+                    serviceSubtask.setContinueCount(patTaskRelevance.getContinueCount());
+                    serviceSubtask.setContinueFlag(patTaskRelevance.getContinueFlag());
+                    serviceSubtask.setContinueTimeNext(patTaskRelevance.getContinueTimeNext());
+                    serviceSubtask.setContinueTimeNow(patTaskRelevance.getContinueTimeNow());
                     serviceSubtask.setCreateBy(serviceTask.getCreateBy());
                     serviceSubtask.setUpdateBy(serviceTask.getCreateBy());
                     serviceSubtask.setVisitTime(patTaskRelevance.getVisittime());
@@ -705,7 +716,7 @@
             //淇敼鎿嶄綔锛岄渶瑕佸皢stopState鐘舵��+1
             ServiceTask serviceTask1 = serviceTaskService.selectServiceTaskByTaskid(serviceTask.getTaskid());
             //鑾峰彇鍒拌浠诲姟鎵�鏈夌殑鏈嶅姟锛屽苟浠庨槦鍒楅噷鍒犻櫎
-            ServiceSubtaskVO serviceSubtaskVO = new ServiceSubtaskVO();
+            ServiceSubtaskEntity serviceSubtaskVO = new ServiceSubtaskEntity();
             serviceSubtaskVO.setTaskid(serviceTask1.getTaskid());
             serviceSubtaskVO.setSendstate(2L);
             List<ServiceSubtask> serviceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO);
@@ -887,6 +898,11 @@
                     serviceSubtask.setDrcode(patTaskRelevance.getDrcode());
                     serviceSubtask.setInhosptime(patTaskRelevance.getInhosptime());
                     serviceSubtask.setHospType(patTaskRelevance.getHospType());
+                    serviceSubtask.setContinueContent(ObjectUtils.isNotEmpty(patTaskRelevance.getContinueContent()) ? patTaskRelevance.getContinueContent().toString() : null);
+                    serviceSubtask.setContinueCount(patTaskRelevance.getContinueCount());
+                    serviceSubtask.setContinueFlag(patTaskRelevance.getContinueFlag());
+                    serviceSubtask.setContinueTimeNext(patTaskRelevance.getContinueTimeNext());
+                    serviceSubtask.setContinueTimeNow(patTaskRelevance.getContinueTimeNow());
                     serviceSubtask.setEndtime(patTaskRelevance.getEndtime());
                     serviceSubtask.setNurseId(patTaskRelevance.getNurseId());
                     serviceSubtask.setNurseName(patTaskRelevance.getNurseName());
@@ -911,7 +927,7 @@
                 }
             }
             // 鏈夊彲鑳戒細鎶婂彂閫侀『搴忎篃淇敼浜嗭紙闇�瑕佹牴鎹畉askId灏嗘墍鏈夌殑sendstate锛�=4,5,6鐨剆ubTask鎷夊嚭鏉ワ紝杩涜淇敼涓�涓嬶級
-            ServiceSubtaskVO ssVo = new ServiceSubtaskVO();
+            ServiceSubtaskEntity ssVo = new ServiceSubtaskEntity();
             ssVo.setTaskid(serviceTaskVO.getTaskid());
             ssVo.setDelFlag("0");
             List<Long> ssList = new ArrayList<>();
@@ -1698,7 +1714,7 @@
                             redisCache.setCacheObject(phoneCallReqYQVO.getTaskid().trim() + "&&" + "mate" + "&&" + phoneCallReqYQVO.getUuid(), count + 1, 120, TimeUnit.MINUTES);
 
                         phoneCallBackYQVO.setType("text");
-                        phoneCallBackYQVO.setValue(ivrTaskTemplateScriptVO.getNoMatchText() + getObject(serviceSubtask, StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getIvrtext())?ivrTaskTemplateScriptVO.getIvrtext():ivrTaskTemplateScriptVO.getScriptContent()));
+                        phoneCallBackYQVO.setValue(ivrTaskTemplateScriptVO.getNoMatchText() + getObject(serviceSubtask, StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getIvrtext()) ? ivrTaskTemplateScriptVO.getIvrtext() : ivrTaskTemplateScriptVO.getScriptContent()));
                     }
                 }
 
@@ -1993,11 +2009,12 @@
     @Override
     public Integer saveQuestionAnswerPhone(ServiceSubTaskDetailReq serviceSubTaskDetailReq) {
         int i = 0;
+        log.info("淇濆瓨鐢佃瘽鍥炶皟鍐呭 saveQuestionAnswerPhone锛歿}", serviceSubTaskDetailReq);
         if (StringUtils.isNotEmpty(serviceSubTaskDetailReq.getParam1())) {
             RSAPublicKeyExample rsaPublicKeyExample = new RSAPublicKeyExample();
             Long tid = Long.valueOf(rsaPublicKeyExample.decryptedData(serviceSubTaskDetailReq.getParam1(), pri_key));
             Long pid = Long.valueOf(rsaPublicKeyExample.decryptedData(serviceSubTaskDetailReq.getParam2(), pri_key));
-            ServiceSubtaskVO ivrTaskSingle = new ServiceSubtaskVO();
+            ServiceSubtaskEntity ivrTaskSingle = new ServiceSubtaskEntity();
             ivrTaskSingle.setTaskid(tid);
             ivrTaskSingle.setPatid(pid);
             List<ServiceSubtask> selectServiceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(ivrTaskSingle);
@@ -2229,60 +2246,100 @@
     @Cacheable(value = "sfStatistics", key = "T(org.springframework.util.DigestUtils).md5DigestAsHex(#serviceSubtaskCountReq.toString().getBytes())", unless = "#result == null or #result.isEmpty()")
     public List<ServiceSubtaskStatistic> getSfStatistics(ServiceSubtaskCountReq serviceSubtaskCountReq) {
         log.info("getSfStatistics鐨勫叆鍙備负锛歿}", serviceSubtaskCountReq);
-        List<ServiceSubtaskStatistic> serviceSubtaskStatistics = new ArrayList<>();
-//        List<ServiceSubtask> rawData = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq);
-
-        // 鏍规嵁鏉′欢杩涜鍒嗙粍
-        Map<String, List<ServiceSubtask>> collect = new HashMap<>();
-
-        if (serviceSubtaskCountReq.getLeavehospitaldistrictcodes() != null && serviceSubtaskCountReq.getLeavehospitaldistrictcodes().size() > 0) {
+        String groupKey = "drcode";
+        if (serviceSubtaskCountReq.getLeavehospitaldistrictcodes() != null && !serviceSubtaskCountReq.getLeavehospitaldistrictcodes().isEmpty()) {
             if (serviceSubtaskCountReq.getDrcode() != null && !serviceSubtaskCountReq.getDrcode().isEmpty()) {
-                collect = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq).stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getDrname()).orElse("Unknown")));
+                groupKey = "drcode";
             } else {
-                collect = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq).stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getLeavehospitaldistrictname()).orElse("Unknown")));
+                groupKey = "leavehospitaldistrictcode";
             }
-        } else if (serviceSubtaskCountReq.getDeptcodes() != null && serviceSubtaskCountReq.getDeptcodes().size() > 0) {
+        } else if (serviceSubtaskCountReq.getDeptcodes() != null && !serviceSubtaskCountReq.getDeptcodes().isEmpty()) {
             if (serviceSubtaskCountReq.getDrcode() != null && !serviceSubtaskCountReq.getDrcode().isEmpty()) {
-                collect = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq).stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getDrname()).orElse("Unknown")));
+                groupKey = "drcode";
             } else {
-                collect = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq).stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getDeptname()).orElse("Unknown")));
+                groupKey = "deptcode";
             }
         }
-
-        for (List<ServiceSubtask> serviceSubtaskList : collect.values()) {
+        List<ServiceSubtaskStatistic> serviceSubtaskStatistics = new ArrayList<>();
+        // 鏍规嵁鏉′欢杩涜鍒嗙粍
+        Map<String, List<ServiceSubtask>> collect = new HashMap<>();
+        serviceSubtaskCountReq.setGroupKey(groupKey);
+        List<String> groupKeyList = serviceSubtaskMapper.getSfStatisticsGroupKey(serviceSubtaskCountReq);
+        serviceSubtaskCountReq.setGroupKeyList(groupKeyList);
+        List<ServiceSubtask> rawData = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq);
+        switch (groupKey) {
+            case "deptcode":
+                collect = rawData.stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getDeptcode()).orElse("Unknown")));
+                break;
+            case "drcode":
+                collect = rawData.stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getDrcode()).orElse("Unknown")));
+                break;
+            case "leavehospitaldistrictcode":
+                collect = rawData.stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getLeavehospitaldistrictcode()).orElse("Unknown")));
+                break;
+            default:
+                collect = rawData.stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getDrcode()).orElse("Unknown")));
+                break;
+        }
+        //鑾峰彇鍙婃椂鐜囩粺璁″悎闆�
+        Map<String, Map<String, Object>> jsRates = getSsRateForSfStatistics(serviceSubtaskCountReq, collect);
+        for (String collectKey : collect.keySet()) {
+            List<ServiceSubtask> serviceSubtaskList = collect.get(collectKey);
             if (CollectionUtils.isEmpty(serviceSubtaskList)) {
                 continue;
             }
-            ServiceSubtaskStatistic statistic = getStatistic(serviceSubtaskList);
-
-            //鍙婃椂鐜�
-            ServiceSubtask ss = new ServiceSubtask();
-            ss.setOrgid(serviceSubtaskList.get(0).getOrgid());
-
-            // 濡傛灉鏈夊尰鐢熺紪鐮侊紝璁剧疆鍖荤敓缂栫爜鐢ㄤ簬鍙婃椂鐜囨煡璇�
-            if (serviceSubtaskCountReq.getDrcode() != null && !serviceSubtaskCountReq.getDrcode().isEmpty()) {
-                ss.setDrcode(serviceSubtaskList.get(0).getDrcode());
-            } else {
-                if (CollectionUtils.isNotEmpty(serviceSubtaskCountReq.getLeavehospitaldistrictcodes())) {
-                    ss.setLeavehospitaldistrictcode(serviceSubtaskList.get(0).getLeavehospitaldistrictcode());
-                } else if (CollectionUtils.isNotEmpty(serviceSubtaskCountReq.getDeptcodes())) {
-                    ss.setDeptcode(serviceSubtaskList.get(0).getDeptcode());
+            ServiceSubtaskStatistic statistic = getStatistic(serviceSubtaskList, serviceSubtaskCountReq.getFollowUpCountStyle());
+            if (ObjectUtils.isNotEmpty(jsRates)) {
+                Map<String, Object> jsRateMap = jsRates.get(collectKey);
+                BigDecimal jsRate = new BigDecimal("0");
+                if (ObjectUtils.isNotEmpty(jsRateMap) && ObjectUtils.isNotEmpty(jsRateMap.get("rate"))) {
+                    jsRate = new BigDecimal(jsRateMap.get("rate").toString());
                 }
+                Double jsRateDouble = (jsRate.setScale(4, RoundingMode.HALF_UP)).doubleValue();
+                statistic.setRate(jsRateDouble);
             }
-
-            ss.setStarttime(serviceSubtaskCountReq.getStartTime());
-            ss.setEndtime(serviceSubtaskCountReq.getEndTime());
-            if (serviceSubtaskCountReq.getEndTime() != null && new Date().before(serviceSubtaskCountReq.getEndTime())) {
-                ss.setEndtime(new Date());
-            }
-            Double jsRate = serviceSubtaskMapper.selectTimelyRate(ss);
-            statistic.setRate(jsRate);
 
             if (ObjectUtils.isNotEmpty(statistic)) {
                 serviceSubtaskStatistics.add(statistic);
             }
         }
         return serviceSubtaskStatistics;
+    }
+
+    /**
+     * 闅忚缁熻-鍙婃椂鐜囩粺璁�
+     *
+     * @param serviceSubtaskCountReq
+     * @param collect
+     * @return
+     */
+    public Map<String, Map<String, Object>> getSsRateForSfStatistics(ServiceSubtaskCountReq serviceSubtaskCountReq, Map<String, List<ServiceSubtask>> collect) {
+        if (ObjectUtils.isEmpty(serviceSubtaskCountReq)) {
+            return null;
+        }
+        String groupKey = serviceSubtaskCountReq.getGroupKey();
+        if (StringUtils.isEmpty(groupKey)) {
+            return null;
+        }
+        List<String> groupKeyList = new ArrayList<>(collect.keySet());
+        if (ObjectUtils.isEmpty(groupKeyList)) {
+            return null;
+        }
+        //鍙婃椂鐜囩粺璁�
+        ServiceSubtaskEntity ssRate = new ServiceSubtaskEntity();
+        ssRate.setOrgid(serviceSubtaskCountReq.getOrgid());
+        ssRate.setStarttime(serviceSubtaskCountReq.getStartTime());
+        ssRate.setEndtime(serviceSubtaskCountReq.getEndTime());
+        if (serviceSubtaskCountReq.getEndTime() != null && new Date().before(serviceSubtaskCountReq.getEndTime())) {
+            ssRate.setEndtime(new Date());
+        }
+        ssRate.setGroupKey(groupKey);
+        ssRate.setGroupKeyList(groupKeyList);
+        Map<String, Map<String, Object>> jsRates = new HashMap<>();
+        if (!collect.isEmpty()) {
+            jsRates = serviceSubtaskMapper.selectTimelyRateBatch(ssRate);
+        }
+        return jsRates;
     }
 
     @Override
@@ -2383,7 +2440,6 @@
     }
 
 
-
     /**
      * 鑾峰彇婊℃剰搴﹂鐩�婚噺
      * type : 1-绉戝   2鐥呭尯
@@ -2424,7 +2480,7 @@
                     List<IvrTaskTemplateScript> ivrTaskTemplateScripts = iIvrTaskTemplateScriptService.selectIvrTaskTemplateScriptList(ivrTaskTemplateScript);
                     if (CollectionUtils.isNotEmpty(ivrTaskTemplateScripts)) {
                         //闇�瑕佸厛璁$畻鍑哄彂閫侀噺锛屽啀涔樹互鍗曚釜闂埜婊℃剰搴﹂鐩暟閲忥紝寰楀埌婊℃剰搴﹂鐩�婚噺锛堝寘鍚簡鏈仛鐨勶級
-                        ServiceSubtaskVO serviceSubtaskVO = new ServiceSubtaskVO();
+                        ServiceSubtaskEntity serviceSubtaskVO = new ServiceSubtaskEntity();
                         serviceSubtaskVO.setTaskid(serviceTask.getTaskid());
                         List<Long> sendstates = new ArrayList<>(Arrays.asList(3L, 5L, 6L));
                         serviceSubtaskVO.setSendstates(sendstates);
@@ -2443,11 +2499,11 @@
                     svyTaskTemplateScript.setCategoryid(svyCategoryid);
                     List<SvyTaskTemplateScript> svyTaskTemplateScriptList = svyTaskTemplateScriptService.selectSvyTaskTemplateScriptList(svyTaskTemplateScript);
                     if (CollectionUtils.isNotEmpty(svyTaskTemplateScriptList)) {
-                        ServiceSubtaskVO serviceSubtaskVO = new ServiceSubtaskVO();
-                        serviceSubtaskVO.setTaskid(serviceTask.getTaskid());
+                        ServiceSubtaskEntity serviceSubtaskEntity = new ServiceSubtaskEntity();
+                        serviceSubtaskEntity.setTaskid(serviceTask.getTaskid());
                         List<Long> sendstates = new ArrayList<>(Arrays.asList(3L, 5L, 6L));
-                        serviceSubtaskVO.setSendstates(sendstates);
-                        List<ServiceSubtask> serviceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskBySendstate(serviceSubtaskVO);
+                        serviceSubtaskEntity.setSendstates(sendstates);
+                        List<ServiceSubtask> serviceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskBySendstate(serviceSubtaskEntity);
                         if (CollectionUtils.isNotEmpty(serviceSubtaskList)) {
                             int mydtmzlCount = svyTaskTemplateScriptList.size() * serviceSubtaskList.size();
                             mydtmzlsum.add(new BigDecimal(mydtmzlCount));
@@ -2480,7 +2536,7 @@
     }
 
 
-    private ServiceSubtaskStatistic getStatistic(List<ServiceSubtask> serviceSubtaskList) {
+    private ServiceSubtaskStatistic getStatistic(List<ServiceSubtask> serviceSubtaskList, String followUpCountStyle) {
         ServiceSubtaskStatistic serviceSubtaskStatistic = new ServiceSubtaskStatistic();
         //鏍煎紡鍖栦负涓や綅灏忔暟鐨勭櫨鍒嗘瘮
         DecimalFormat percentFormat = new DecimalFormat("##.##%");
@@ -2514,7 +2570,7 @@
         //璁板綍鍐嶆寰呴殢璁胯鎯�
         List<ServiceSubtask> pendingFollowUpAgainInfo = new ArrayList<>();
         //璁板綍鍐嶆闅忚鎴愬姛璇︽儏
-        List<ServiceSubtask> followUpSuccessAgainInfo= new ArrayList<>();
+        List<ServiceSubtask> followUpSuccessAgainInfo = new ArrayList<>();
         //璁板綍鍐嶆闅忚澶辫触璇︽儏
         List<ServiceSubtask> followUpFailAgainInfo = new ArrayList<>();
         //璁板綍棣栨闅忚浜哄伐璇︽儏
@@ -2522,13 +2578,13 @@
         //璁板綍棣栨闅忚鐭俊璇︽儏
         List<ServiceSubtask> smsAgainInfo = new ArrayList<>();
         //璁板綍棣栨闅忚寰俊璇︽儏
-        List<ServiceSubtask> wechatAgainInfo= new ArrayList<>();
+        List<ServiceSubtask> wechatAgainInfo = new ArrayList<>();
 
         for (ServiceSubtask serviceSubtask : serviceSubtaskList) {
             //鏃犻渶闅忚浜烘
             if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 4) {
                 serviceSubtaskStatistic.setNonFollowUp(serviceSubtaskStatistic.getNonFollowUp() + 1L);
-                if (serviceSubtask.getTaskSituation() !=null && serviceSubtask.getTaskSituation() == 6) {
+                if (serviceSubtask.getTaskSituation() != null && serviceSubtask.getTaskSituation() == 6) {
                     serviceSubtaskStatistic.setFilterCount(serviceSubtaskStatistic.getFilterCount() + 1L);
                     filterServiceSubtasks.add(serviceSubtask);
                 }
@@ -2550,36 +2606,62 @@
                     serviceSubtaskStatistic.setPendingFollowUp(serviceSubtaskStatistic.getPendingFollowUp() + 1L);
                     pendingFollowUpInfo.add(serviceSubtask);
                 }
-                //棣栨闅忚鎴愬姛
-                if (serviceSubtask.getSendstate() != null && (serviceSubtask.getSendstate() == 6)) {
-                    serviceSubtaskStatistic.setFollowUpSuccess(serviceSubtaskStatistic.getFollowUpSuccess() + 1L);
-                    followUpSuccessInfo.add(serviceSubtask);
-                }
                 //棣栨闅忚澶辫触
                 if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 5) {
                     serviceSubtaskStatistic.setFollowUpFail(serviceSubtaskStatistic.getFollowUpFail() + 1L);
                     followUpFailInfo.add(serviceSubtask);
+                }
+                /**
+                 * 涓嶅悓缁熻鏂瑰紡涓嬩笉鍚岀殑闅忚鎴愬姛鏁� 鍙傛暟 followUpCountStyle 鎺у埗
+                 */
+                if (StringUtils.isNotEmpty(followUpCountStyle) && followUpCountStyle.equals("1")) {
+                    //棣栨闅忚鎴愬姛
+                    if (serviceSubtask.getSendstate() != null && (serviceSubtask.getSendstate() == 6L)) {
+                        serviceSubtaskStatistic.setFollowUpSuccess(serviceSubtaskStatistic.getFollowUpSuccess() + 1L);
+                        followUpSuccessInfo.add(serviceSubtask);
+                    }
+                    //棣栨闅忚浜哄伐 (涓嶇粺璁′笉鎵ц)
+                    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.getSendstate().equals(4L) && serviceSubtask.getPreachform().equals("4")) {
+                        serviceSubtaskStatistic.setSms(serviceSubtaskStatistic.getSms() + 1L);
+                        smsInfo.add(serviceSubtask);
+                    }
+                    //棣栨闅忚寰俊(涓嶇粺璁′笉鎵ц)
+                    if (serviceSubtask.getSendstate() != null && !serviceSubtask.getSendstate().equals(4L) && serviceSubtask.getPreachform().equals("5")) {
+                        serviceSubtaskStatistic.setWeChat(serviceSubtaskStatistic.getWeChat() + 1L);
+                        wechatInfo.add(serviceSubtask);
+                    }
+                } else {
+                    //棣栨闅忚鎴愬姛 - 缁熻鏃跺�欏姞涓婁笉鎵ц鐨勶紝宸插彂閫佺殑
+                    if (serviceSubtask.getSendstate() != null && (serviceSubtask.getSendstate().equals(6L) || serviceSubtask.getSendstate().equals(3L) || serviceSubtask.getSendstate().equals(4L))) {
+                        serviceSubtaskStatistic.setFollowUpSuccess(serviceSubtaskStatistic.getFollowUpSuccess() + 1L);
+                        followUpSuccessInfo.add(serviceSubtask);
+                    }
+                    //棣栨闅忚浜哄伐 (缁熻涓嶆墽琛�)
+                    if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("1")) {
+                        serviceSubtaskStatistic.setManual(serviceSubtaskStatistic.getManual() + 1L);
+                        manualInfo.add(serviceSubtask);
+                    }
+                    //棣栨闅忚鐭俊(缁熻涓嶆墽琛�)
+                    if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("4")) {
+                        serviceSubtaskStatistic.setSms(serviceSubtaskStatistic.getSms() + 1L);
+                        smsInfo.add(serviceSubtask);
+                    }
+                    //棣栨闅忚寰俊(缁熻涓嶆墽琛�)
+                    if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("5")) {
+                        serviceSubtaskStatistic.setWeChat(serviceSubtaskStatistic.getWeChat() + 1L);
+                        wechatInfo.add(serviceSubtask);
+                    }
                 }
                 if (serviceSubtaskStatistic.getNeedFollowUp() > 0) {
                     double rate = (double) (serviceSubtaskStatistic.getFollowUpSuccess() + serviceSubtaskStatistic.getFollowUpFail()) / serviceSubtaskStatistic.getNeedFollowUp();
                     serviceSubtaskStatistic.setFollowUpRate(percentFormat.format(rate));
                 } else {
                     serviceSubtaskStatistic.setFollowUpRate("0.00%");
-                }
-                //棣栨闅忚浜哄伐
-                if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("1")) {
-                    serviceSubtaskStatistic.setManual(serviceSubtaskStatistic.getManual() + 1L);
-                    manualInfo.add(serviceSubtask);
-                }
-                //棣栨闅忚鐭俊
-                if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("4")) {
-                    serviceSubtaskStatistic.setSms(serviceSubtaskStatistic.getSms() + 1L);
-                    smsInfo.add(serviceSubtask);
-                }
-                //棣栨闅忚寰俊
-                if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("5")) {
-                    serviceSubtaskStatistic.setWeChat(serviceSubtaskStatistic.getWeChat() + 1L);
-                    wechatInfo.add(serviceSubtask);
                 }
                 //缁撴灉寮傚父
                 if (serviceSubtask.getSendstate() != null && serviceSubtask.getExcep().equals("1")) {
@@ -2597,36 +2679,62 @@
                     serviceSubtaskStatistic.setPendingFollowUpAgain(serviceSubtaskStatistic.getPendingFollowUpAgain() + 1L);
                     pendingFollowUpAgainInfo.add(serviceSubtask);
                 }
-                //鍐嶆闅忚鎴愬姛
-                if (serviceSubtask.getSendstate() != null && (serviceSubtask.getSendstate() == 1 || serviceSubtask.getSendstate() == 3 || serviceSubtask.getSendstate() == 6)) {
-                    serviceSubtaskStatistic.setFollowUpSuccessAgain(serviceSubtaskStatistic.getFollowUpSuccessAgain() + 1L);
-                    followUpSuccessAgainInfo.add(serviceSubtask);
-                }
                 //鍐嶆闅忚澶辫触
                 if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 5) {
                     serviceSubtaskStatistic.setFollowUpFailAgain(serviceSubtaskStatistic.getFollowUpFailAgain() + 1L);
                     followUpFailAgainInfo.add(serviceSubtask);
+                }
+                /**
+                 * 涓嶅悓缁熻鏂瑰紡涓嬩笉鍚岀殑闅忚鎴愬姛鏁� 鍙傛暟 followUpCountStyle 鎺у埗
+                 */
+                if (StringUtils.isNotEmpty(followUpCountStyle) && followUpCountStyle.equals("1")) {
+                    //鍐嶆闅忚鎴愬姛
+                    if (serviceSubtask.getSendstate() != null && (serviceSubtask.getSendstate() == 1 || serviceSubtask.getSendstate() == 3 || serviceSubtask.getSendstate() == 6)) {
+                        serviceSubtaskStatistic.setFollowUpSuccessAgain(serviceSubtaskStatistic.getFollowUpSuccessAgain() + 1L);
+                        followUpSuccessAgainInfo.add(serviceSubtask);
+                    }
+                    //鍐嶆闅忚浜哄伐(涓嶇粺璁′笉鎵ц)
+                    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.getSendstate().equals(4L) && serviceSubtask.getPreachform().equals("4")) {
+                        serviceSubtaskStatistic.setSmsAgain(serviceSubtaskStatistic.getSmsAgain() + 1L);
+                        smsAgainInfo.add(serviceSubtask);
+                    }
+                    //鍐嶆闅忚寰俊(涓嶇粺璁′笉鎵ц)
+                    if (serviceSubtask.getSendstate() != null && !serviceSubtask.getSendstate().equals(4L) && serviceSubtask.getPreachform().equals("5")) {
+                        serviceSubtaskStatistic.setWeChatAgain(serviceSubtaskStatistic.getWeChatAgain() + 1L);
+                        wechatAgainInfo.add(serviceSubtask);
+                    }
+                } else {
+                    //鍐嶆闅忚鎴愬姛
+                    if (serviceSubtask.getSendstate() != null && (serviceSubtask.getSendstate().equals(1L) || serviceSubtask.getSendstate().equals(6L) || serviceSubtask.getSendstate().equals(3L) || serviceSubtask.getSendstate().equals(4L))) {
+                        serviceSubtaskStatistic.setFollowUpSuccessAgain(serviceSubtaskStatistic.getFollowUpSuccessAgain() + 1L);
+                        followUpSuccessAgainInfo.add(serviceSubtask);
+                    }
+                    //鍐嶆闅忚浜哄伐(缁熻涓嶆墽琛�)
+                    if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("1")) {
+                        serviceSubtaskStatistic.setManualAgain(serviceSubtaskStatistic.getManualAgain() + 1L);
+                        manualAgainInfo.add(serviceSubtask);
+                    }
+                    //鍐嶆闅忚鐭俊(缁熻涓嶆墽琛�)
+                    if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("4")) {
+                        serviceSubtaskStatistic.setSmsAgain(serviceSubtaskStatistic.getSmsAgain() + 1L);
+                        smsAgainInfo.add(serviceSubtask);
+                    }
+                    //鍐嶆闅忚寰俊(缁熻涓嶆墽琛�)
+                    if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("5")) {
+                        serviceSubtaskStatistic.setWeChatAgain(serviceSubtaskStatistic.getWeChatAgain() + 1L);
+                        wechatAgainInfo.add(serviceSubtask);
+                    }
                 }
                 if (serviceSubtaskStatistic.getNeedFollowUp() > 0) {
                     double rate = (double) (serviceSubtaskStatistic.getFollowUpSuccessAgain() + serviceSubtaskStatistic.getFollowUpFailAgain()) / serviceSubtaskStatistic.getNeedFollowUpAgain();
                     serviceSubtaskStatistic.setFollowUpRateAgain(percentFormat.format(rate));
                 } else {
                     serviceSubtaskStatistic.setFollowUpRateAgain("0.00%");
-                }
-                //鍐嶆闅忚浜哄伐
-                if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("1")) {
-                    serviceSubtaskStatistic.setManualAgain(serviceSubtaskStatistic.getManualAgain() + 1L);
-                    manualAgainInfo.add(serviceSubtask);
-                }
-                //鍐嶆闅忚鐭俊
-                if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("4")) {
-                    serviceSubtaskStatistic.setSmsAgain(serviceSubtaskStatistic.getSmsAgain() + 1L);
-                    smsAgainInfo.add(serviceSubtask);
-                }
-                //鍐嶆闅忚寰俊
-                if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("5")) {
-                    serviceSubtaskStatistic.setWeChatAgain(serviceSubtaskStatistic.getWeChatAgain() + 1L);
-                    wechatAgainInfo.add(serviceSubtask);
                 }
                 //鍐嶆寮傚父
                 if (serviceSubtask.getSendstate() != null && serviceSubtask.getExcep().equals("1")) {
@@ -2805,7 +2913,7 @@
 
         //鑾峰彇闅忚缁熻
         List<Long> subTaskIds = new ArrayList<>();
-        if(ObjectUtils.isNotEmpty(serviceSubtaskList)){
+        if (ObjectUtils.isNotEmpty(serviceSubtaskList)) {
             subTaskIds = serviceSubtaskList.stream().map(ServiceSubtask::getId)      // 鎻愬彇瀛楁
                     .filter(Objects::nonNull)       // 杩囨护 null 鍊�
                     .filter(id -> ObjectUtils.isNotEmpty(id))  // 杩囨护绌哄瓧绗︿覆锛堝彲閫夛級
@@ -3069,61 +3177,68 @@
      * @return
      */
     @Override
-//    @Cacheable(value = "getSfStatisticsScript", 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);
+        log.info("getSfStatisticsScript鐨勫叆鍙備负锛歿}", serviceSubtaskCountReq);
         List<ServiceSubtaskStatistic> serviceSubtaskStatistics = new ArrayList<>();
 
         // 鏍规嵁鏉′欢杩涜鍒嗙粍
         Map<String, List<ServiceSubtask>> collect = new HashMap<>();
-        String orgid = null;
-
-        if (serviceSubtaskCountReq.getLeavehospitaldistrictcodes() != null && serviceSubtaskCountReq.getLeavehospitaldistrictcodes().size() > 0) {
+        String groupKey = "drcode";
+        if (serviceSubtaskCountReq.getLeavehospitaldistrictcodes() != null && !serviceSubtaskCountReq.getLeavehospitaldistrictcodes().isEmpty()) {
             if (serviceSubtaskCountReq.getDrcode() != null && !serviceSubtaskCountReq.getDrcode().isEmpty()) {
-                collect = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq).stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getDrname()).orElse("Unknown")));
-
+                groupKey = "drcode";
             } else {
-                collect = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq).stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getLeavehospitaldistrictname()).orElse("Unknown")));
+                groupKey = "leavehospitaldistrictcode";
             }
-        } else if (serviceSubtaskCountReq.getDeptcodes() != null && serviceSubtaskCountReq.getDeptcodes().size() > 0) {
+        } else if (serviceSubtaskCountReq.getDeptcodes() != null && !serviceSubtaskCountReq.getDeptcodes().isEmpty()) {
             if (serviceSubtaskCountReq.getDrcode() != null && !serviceSubtaskCountReq.getDrcode().isEmpty()) {
-                collect = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq).stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getDrname()).orElse("Unknown")));
+                groupKey = "drcode";
             } else {
-                collect = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq).stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getDeptname()).orElse("Unknown")));
+                groupKey = "deptcode";
             }
         }
-        for (List<ServiceSubtask> serviceSubtaskList : collect.values()) {
+        serviceSubtaskCountReq.setGroupKey(groupKey);
+        List<String> groupKeyList = serviceSubtaskMapper.getSfStatisticsGroupKey(serviceSubtaskCountReq);
+        serviceSubtaskCountReq.setGroupKeyList(groupKeyList);
+        List<ServiceSubtask> rawData = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq);
+        switch (groupKey) {
+            case "deptcode":
+                collect = rawData.stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getDeptcode()).orElse("Unknown")));
+                break;
+            case "drcode":
+                collect = rawData.stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getDrcode()).orElse("Unknown")));
+                break;
+            case "leavehospitaldistrictcode":
+                collect = rawData.stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getLeavehospitaldistrictcode()).orElse("Unknown")));
+                break;
+            default:
+                collect = rawData.stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getDrcode()).orElse("Unknown")));
+                break;
+        }
+        //鑾峰彇鍙婃椂鐜囩粺璁″悎闆�
+        Map<String, Map<String, Object>> jsRates = getSsRateForSfStatistics(serviceSubtaskCountReq, collect);
+        for (String collectKey : collect.keySet()) {
+            List<ServiceSubtask> serviceSubtaskList = collect.get(collectKey);
             if (CollectionUtils.isEmpty(serviceSubtaskList)) {
                 continue;
             }
             ServiceSubtaskStatistic statistic = getStatisticCategory(serviceSubtaskList, serviceSubtaskCountReq);
-            //鍙婃椂鐜�
-            ServiceSubtask ss = new ServiceSubtask();
-            orgid = serviceSubtaskList.get(0).getOrgid();
-            ss.setOrgid(orgid);
-
-            // 濡傛灉鏈夊尰鐢熺紪鐮侊紝璁剧疆鍖荤敓缂栫爜鐢ㄤ簬鍙婃椂鐜囨煡璇�
-            if (serviceSubtaskCountReq.getDrcode() != null && !serviceSubtaskCountReq.getDrcode().isEmpty()) {
-                ss.setDrcode(serviceSubtaskList.get(0).getDrcode());
-            } else {
-                if (CollectionUtils.isNotEmpty(serviceSubtaskCountReq.getLeavehospitaldistrictcodes())) {
-                    ss.setLeavehospitaldistrictcode(serviceSubtaskList.get(0).getLeavehospitaldistrictcode());
-                } else if (CollectionUtils.isNotEmpty(serviceSubtaskCountReq.getDeptcodes())) {
-                    ss.setDeptcode(serviceSubtaskList.get(0).getDeptcode());
+            if (ObjectUtils.isNotEmpty(jsRates)) {
+                Map<String, Object> jsRateMap = jsRates.get(collectKey);
+                BigDecimal jsRate = new BigDecimal("0");
+                if (ObjectUtils.isNotEmpty(jsRateMap) && ObjectUtils.isNotEmpty(jsRateMap.get("rate"))) {
+                    jsRate = new BigDecimal(jsRateMap.get("rate").toString());
                 }
+                Double jsRateDouble = (jsRate.setScale(4, RoundingMode.HALF_UP)).doubleValue();
+                statistic.setRate(jsRateDouble);
             }
-
-            ss.setStarttime(serviceSubtaskCountReq.getStartTime());
-            ss.setEndtime(serviceSubtaskCountReq.getEndTime());
-            if (serviceSubtaskCountReq.getEndTime() != null && new Date().before(serviceSubtaskCountReq.getEndTime())) {
-                ss.setEndtime(new Date());
-            }
-            Double jsRate = serviceSubtaskMapper.selectTimelyRate(ss);
-            statistic.setRate(jsRate);
             if (ObjectUtils.isNotEmpty(statistic)) {
                 serviceSubtaskStatistics.add(statistic);
             }
         }
+
+        //缁熻闅忚棰樼洰鍒嗙被
         if (CollectionUtils.isNotEmpty(serviceSubtaskStatistics)) {
             for (ServiceSubtaskStatistic serviceSubtaskStatistic : serviceSubtaskStatistics) {
                 //鑾峰彇婊℃剰搴﹂鐩�婚噺
@@ -3132,14 +3247,14 @@
                 BigDecimal finishedSum = new BigDecimal(0);
                 //瀹屾垚姣斾緥
                 Double finishedPercentage = null;
-                if(ObjectUtils.isNotEmpty(serviceSubtaskStatistic.getJoyCount())){
+                if (ObjectUtils.isNotEmpty(serviceSubtaskStatistic.getJoyCount())) {
                     finishedSum = new BigDecimal(serviceSubtaskStatistic.getJoyCount());
                 }
 
-                if(ObjectUtils.isNotEmpty(serviceSubtaskStatistic.getJoyAllCount())){
+                if (ObjectUtils.isNotEmpty(serviceSubtaskStatistic.getJoyAllCount())) {
                     sum = new BigDecimal(serviceSubtaskStatistic.getJoyAllCount());
                 }
-                if(sum.intValue() != 0){
+                if (sum.intValue() != 0) {
                     finishedPercentage = finishedSum.divide(sum, 2, RoundingMode.HALF_UP).doubleValue();
                 }
                 serviceSubtaskStatistic.setJoyAllCount(sum.intValue());
@@ -3157,7 +3272,7 @@
         List<ServiceSubtaskScriptCount> allCounts = new ArrayList<>();
         List<ServiceSubtaskScriptCount> allItemCounts = new ArrayList<>();
         String type = serviceSubtaskCountReq.getType();
-        if(ObjectUtils.isEmpty(type)){
+        if (ObjectUtils.isEmpty(type)) {
             //鏌ヨ璇煶缁熻鏄庣粏
             serviceSubtaskCountReq.setType("1");
             List<ServiceSubtaskScriptCount> ivyCounts = serviceSubtaskMapper.getSfStatisticsScriptDetails(serviceSubtaskCountReq);
@@ -3172,26 +3287,24 @@
             allCounts.addAll(svyCounts);
             allItemCounts.addAll(ivyItemCounts);
             allItemCounts.addAll(svyItemCounts);
-        }else {
+        } else {
             allCounts = serviceSubtaskMapper.getSfStatisticsScriptDetails(serviceSubtaskCountReq);
             allItemCounts = serviceSubtaskMapper.getSfStatisticsScriptItemDetails(serviceSubtaskCountReq);
         }
 
-        for(ServiceSubtaskScriptCount count : allCounts){
+        for (ServiceSubtaskScriptCount count : allCounts) {
             Map<String, ServiceSubtaskScriptCount> itemCountMap = new HashMap<>();
             //闂嵎鍔犱笂绌虹櫧閫夐」
-            if(ObjectUtils.isNotEmpty(count.getTemplateid())
-                    && ObjectUtils.isNotEmpty(count.getSubtaskType())
-                    && count.getSubtaskType().equals("2")){
+            if (ObjectUtils.isNotEmpty(count.getTemplateid()) && ObjectUtils.isNotEmpty(count.getSubtaskType()) && count.getSubtaskType().equals("2")) {
                 SvyTaskTemplateScriptVO svyTaskTemplateScriptVO = new SvyTaskTemplateScriptVO();
                 svyTaskTemplateScriptVO.setId(count.getScriptid());
                 svyTaskTemplateScriptVO.setOrgid(serviceSubtaskCountReq.getOrgid());
                 SvyTaskTemplateScriptVO svyTaskTemplateScriptResultVo = svyTaskTemplateScriptService.selectInfoByCondition(svyTaskTemplateScriptVO);
-                if(ObjectUtils.isNotEmpty(svyTaskTemplateScriptResultVo)){
+                if (ObjectUtils.isNotEmpty(svyTaskTemplateScriptResultVo)) {
                     List<SvyTaskTemplateTargetoption> svyTaskTemplateTargetoptions = svyTaskTemplateScriptResultVo.getSvyTaskTemplateTargetoptions();
-                    if(ObjectUtils.isNotEmpty(svyTaskTemplateTargetoptions)){
+                    if (ObjectUtils.isNotEmpty(svyTaskTemplateTargetoptions)) {
                         //濉叆绌虹櫧淇℃伅
-                        svyTaskTemplateTargetoptions.forEach(targetoption ->{
+                        svyTaskTemplateTargetoptions.forEach(targetoption -> {
                             ServiceSubtaskScriptCount emptyCount = new ServiceSubtaskScriptCount();
                             emptyCount.setScriptid(count.getScriptid());
                             emptyCount.setScriptContent(count.getScriptContent());
@@ -3204,14 +3317,14 @@
                             emptyCount.setChosenQuantity(0);
                             emptyCount.setChosenPercentage("0.0");
                             emptyCount.setOptionText(targetoption.getOptioncontent());
-                            itemCountMap.put(targetoption.getOptioncontent(),emptyCount);
+                            itemCountMap.put(targetoption.getOptioncontent(), emptyCount);
                         });
                     }
                 }
             }
-            allItemCounts.forEach(itemCount ->{
-                if(ObjectUtils.isNotEmpty(count.getScriptid()) && ObjectUtils.isNotEmpty(itemCount.getScriptid())){
-                    if(count.getScriptid().equals(itemCount.getScriptid())){
+            allItemCounts.forEach(itemCount -> {
+                if (ObjectUtils.isNotEmpty(count.getScriptid()) && ObjectUtils.isNotEmpty(itemCount.getScriptid())) {
+                    if (count.getScriptid().equals(itemCount.getScriptid())) {
                         //鏀惧叆缁熻淇℃伅
                         itemCount.setScriptContent(count.getScriptContent());
                         itemCount.setScriptType(count.getScriptType());
@@ -3221,9 +3334,9 @@
                         itemCount.setCompletedPercentage(count.getCompletedPercentage());
                         itemCount.setTemplateid(count.getTemplateid());
                         //璁$畻閫夋嫨姣斾緥
-                        int chosenQuantity = ObjectUtils.isNotEmpty(itemCount.getChosenQuantity())?itemCount.getChosenQuantity():0;
+                        int chosenQuantity = ObjectUtils.isNotEmpty(itemCount.getChosenQuantity()) ? itemCount.getChosenQuantity() : 0;
                         int completedQuantity = itemCount.getCompletedQuantity();
-                        if(ObjectUtils.isNotEmpty(completedQuantity) && completedQuantity != 0){
+                        if (ObjectUtils.isNotEmpty(completedQuantity) && completedQuantity != 0) {
                             BigDecimal chosenPercentage = (new BigDecimal(chosenQuantity)).divide(new BigDecimal(completedQuantity), 2, RoundingMode.HALF_UP);
                             itemCount.setChosenPercentage(chosenPercentage.toString());
                         }
@@ -3233,7 +3346,7 @@
             });
             List<ServiceSubtaskScriptCount> itemCounts = new ArrayList<>(itemCountMap.values());
             count.setDetails(itemCounts);
-            result.put(count.getScriptid().toString(),count);
+            result.put(count.getScriptid().toString(), count);
         }
         return result;
     }
@@ -3247,6 +3360,7 @@
      * @return
      */
     public Boolean setFailPreachForm(ServiceSubtask serviceSubtask, String preachform, String remark, String failSendstate) {
+        log.info("setFailPreachForm 闅忚娴佺▼澶勭悊 serviceSubtask:{}, preachform:{}, remark:{}, failSendstate:{}", serviceSubtask, preachform, remark, failSendstate);
         //灏嗙姸鎬佽缃负澶辫触
         ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform();
         serviceSubtaskPreachform.setSubid(serviceSubtask.getId());
@@ -3273,6 +3387,7 @@
             if (serviceSubtaskPreachform1.getSort() == spSize.size() && failSendstate.equals("4")) {
                 serviceSubtask.setCurrentPreachform(preachform);
                 serviceSubtask.setSendstate(5L);
+                serviceSubtask.setRemark("setFailPreachForm鏂规硶 褰撳墠鐨刾reachform宸茬粡鏄渶鍚庝竴涓簡锛屽叏澶辫触浜�");
                 serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
                 return true;
             }
@@ -3312,6 +3427,7 @@
 
     /**
      * 璁$畻鎬昏琛�
+     *
      * @param statistics 缁熻鏁版嵁鍒楄〃
      * @return 鎬昏琛屾暟鎹�
      */
@@ -3419,8 +3535,8 @@
             diagname.setLongSendTime(subtask.getLongSendTime());
             diagname.setEndtime(subtask.getEndtime());
             //璁$畻鍑洪櫌澶╂暟
-            if(!Objects.isNull(diagname.getEndtime())){
-                Integer endDay = DateUtils.differentDaysByMillisecond(diagname.getEndtime(),new Date());
+            if (!Objects.isNull(diagname.getEndtime())) {
+                Integer endDay = DateUtils.differentDaysByMillisecond(diagname.getEndtime(), new Date());
                 diagname.setEndDay(endDay);
             }
             diagname.setSfzh(subtask.getSfzh());

--
Gitblit v1.9.3