From c0ddb9dad45beceb6afefb03fce409878079775b Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期三, 14 十月 2026 16:30:19 +0800
Subject: [PATCH] 【丽水】1.已拨通/未拨通要在综合统计处体现     2.过滤患者页面增加时间查询

---
 smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java |  178 ++++++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 140 insertions(+), 38 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 ebed5a9..0736c29 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
@@ -558,11 +558,22 @@
 
     @Override
     public List<ServiceSubtask> patItem2(ServiceSubtaskEntity serviceSubtaskEntity) {
+        if (serviceSubtaskEntity.getSendstateView() != null) {
+            //            1锛氬緟闅忚锛�1 琚鍙栥��2 寰呭彂閫併��3 宸插彂閫併��5 鍙戦�佸け璐ャ��7銆佽秴鏃讹級锛�2锛氬凡瀹屾垚锛� 6 宸插畬鎴愶級銆�3锛氭棤闇�闅忚锛�4 涓嶆墽琛岋級
+            if (serviceSubtaskEntity.getSendstateView() == 1)
+                serviceSubtaskEntity.setSendstates(new ArrayList<>(Arrays.asList(1L, 2L, 3L, 5L, 7L)));
+            if (serviceSubtaskEntity.getSendstateView() == 2)
+                serviceSubtaskEntity.setSendstates(new ArrayList<>(Arrays.asList(6L)));
+            if (serviceSubtaskEntity.getSendstateView() == 3)
+                serviceSubtaskEntity.setSendstates(new ArrayList<>(Arrays.asList(4L)));
+        }
         List<ServiceSubtask> serviceSubtaskList = new ArrayList<>();
-        for (Long sendstate : serviceSubtaskEntity.getSendstates()) {
-            serviceSubtaskEntity.setSendstate(sendstate);
-            List<ServiceSubtask> serviceSubtasks = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskEntity);
-            serviceSubtaskList.addAll(serviceSubtasks);
+        if(CollectionUtils.isNotEmpty(serviceSubtaskEntity.getSendstates())){
+            for (Long sendstate : serviceSubtaskEntity.getSendstates()) {
+                serviceSubtaskEntity.setSendstate(sendstate);
+                List<ServiceSubtask> serviceSubtasks = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskEntity);
+                serviceSubtaskList.addAll(serviceSubtasks);
+            }
         }
         return serviceSubtaskList;
     }
@@ -633,6 +644,7 @@
             result.putIfAbsent("xsf", 0);
             result.putIfAbsent("dsf", 0);
             result.putIfAbsent("ywc", 0);
+            result.putIfAbsent("cs", 0);
             result.putIfAbsent("yc", 0);
             result.putIfAbsent("jg", 0);
         }
@@ -669,6 +681,7 @@
             result.putIfAbsent("dsf", 0);
             result.putIfAbsent("dfs", 0);
             result.putIfAbsent("yfs", 0);
+            result.putIfAbsent("cs", 0);
             result.putIfAbsent("ywc", 0);
             result.putIfAbsent("yc", 0);
             result.putIfAbsent("jg", 0);
@@ -2940,7 +2953,7 @@
      * @return
      */
     @Override
-    @Cacheable(value = "sfStatistics", key = "T(org.springframework.util.DigestUtils).md5DigestAsHex(#serviceSubtaskCountReq.toString().getBytes())", unless = "#result == null or #result.isEmpty()")
+//    @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);
         String drcode = "drcode";
@@ -3062,6 +3075,8 @@
         ssRate.setOrgid(serviceSubtaskCountReq.getOrgid());
         ssRate.setStarttime(serviceSubtaskCountReq.getStartTime());
         ssRate.setEndtime(serviceSubtaskCountReq.getEndTime());
+        ssRate.setStartOutHospTime(serviceSubtaskCountReq.getHospitalStartTime());
+        ssRate.setEndOutHospTime(serviceSubtaskCountReq.getHospitalEndTime());
         ssRate.setVisitCount(serviceSubtaskCountReq.getVisitCount());
         ssRate.setServiceTypeList(serviceSubtaskCountReq.getServiceType());
         if (serviceSubtaskCountReq.getEndTime() != null && new Date().before(serviceSubtaskCountReq.getEndTime())) {
@@ -3153,6 +3168,8 @@
             if (serviceSubtaskCountReq.getEndTime() != null && new Date().before(serviceSubtaskCountReq.getEndTime())) {
                 ss.setEndtime(new Date());
             }
+            ss.setStartOutHospTime(serviceSubtaskCountReq.getHospitalStartTime());
+            ss.setEndOutHospTime(serviceSubtaskCountReq.getHospitalEndTime());
             Double jsRate = serviceSubtaskMapper.selectTimelyRate(ss);
             statistic.setRate(jsRate);
             if (ObjectUtils.isNotEmpty(statistic)) {
@@ -3305,6 +3322,12 @@
                 //搴旈殢璁夸汉娆�
                 if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() != 4) {
                     serviceSubtaskStatistic.setFollowUpNeeded(serviceSubtaskStatistic.getFollowUpNeeded() + 1L);
+                }
+
+                //浜哄伐宸叉嫧閫氭�婚噺
+                if (ObjectUtils.isNotEmpty(serviceSubtask.getIsManuallyCalled())
+                        && serviceSubtask.getIsManuallyCalled().equals(1L)) {
+                    serviceSubtaskStatistic.setManuallyCalled(serviceSubtaskStatistic.getManuallyCalled() + 1L);
                 }
 
                 //棣栨鍑洪櫌闅忚
@@ -4326,6 +4349,7 @@
      * taskSituation4Info - taskSituation = 4
      * taskSituation5Info - taskSituation = 5
      * taskSituation6Info - taskSituation = 7
+     * manuallyCalledInfo - isManuallyCalled = 1L
      * filterCountList - taskSituation = 6 && sendstate = 4
      *
      */
@@ -4503,6 +4527,9 @@
             case "filterCountList":
                 serviceSubtaskCountReq.setTaskSituation(6);
                 serviceSubtaskCountReq.setSendstates(new ArrayList<>(Collections.singletonList(4L)));
+                break;
+            case "manuallyCalledInfo":
+                serviceSubtaskCountReq.setIsManuallyCalled(1L);
                 break;
             default:
                 break;
@@ -6137,6 +6164,8 @@
         String voiceText = phoneCallReqYQVO.getAsrtext();
         String questionText = StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getIvrtext()) ? ivrTaskTemplateScriptVO.getIvrtext() : ivrTaskTemplateScriptVO.getScriptContent();
         Integer matched = -1;
+        log.info("AI鍖归厤:url = {},questionText = {},voiceText = {},options = {},uuid ={}",
+                url,questionText,voiceText,options,uuid);
         matched = matchOptionIndex(url, questionText, voiceText, options, uuid);
         //璇存槑鍖归厤姝g‘浜�
         if (matched != null && matched >= 0) {
@@ -6230,7 +6259,8 @@
                 phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + serviceTask.getJsy());
                 //璁板綍鐘舵��
                 setFailPreachForm(serviceSubtask, "3", "鐢佃瘽鎷ㄦ墦宸插畬鎴�", "9");
-                return phoneCallBackYQVO;
+                back = phoneCallBackYQVO;
+                return back;
             }
 
             flag = 1;
@@ -6238,9 +6268,10 @@
             redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "PlayEventCallbackPlaystop");
 //                        //鑾峰彇涓嬩竴棰�
             log.error("鑾峰彇涓嬩竴棰樼殑淇℃伅锛歿}", ivrTaskTemplateScriptVO);
-            if (ivrTaskTemplateScriptVO.getBranchFlag().equals("1") || ivrTaskTemplateScriptVO.getBranchFlag().equals("0") && ivrTaskTemplateScriptVO.getNextScriptno() != null && ivrTaskTemplateScriptVO.getNextScriptno() != 0) {
+            //branchFlag涓簄ull鏃舵寜鍒嗘敮0澶勭悊锛岄伩鍏峃PE
+            if ("1".equals(ivrTaskTemplateScriptVO.getBranchFlag()) || "0".equals(ivrTaskTemplateScriptVO.getBranchFlag()) && ivrTaskTemplateScriptVO.getNextScriptno() != null && ivrTaskTemplateScriptVO.getNextScriptno() != 0) {
                 Long nextQuestion = null;
-                if (ivrTaskTemplateScriptVO.getBranchFlag().equals("1")) {
+                if ("1".equals(ivrTaskTemplateScriptVO.getBranchFlag())) {
                     nextQuestion = chosenOption.getNextQuestion();
                     //鏇存柊鍒嗘暟
                     double score = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
@@ -6273,15 +6304,9 @@
                     redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "- jsy", serviceTask.getJsy(), 120, TimeUnit.MINUTES);
                     phoneCallBackYQVO.setType("text");
                     phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + serviceTask.getJsy());
-                    //灏嗙粨鏋滃啓杩沝etail琛�
-                    ServiceSubTaskDetailReq ssdReq = new ServiceSubTaskDetailReq();
-                    List<ServiceSubtaskDetail> serviceSubtaskDetailList2 = new ArrayList<>();
-                    serviceSubtaskDetailList.add(getServiceSubtaskDetail(phoneCallReqYQVO, ivrTaskTemplateScriptVO, serviceSubtask, ivrTaskTemplate));
-                    serviceSubTaskDetailReq.setServiceSubtaskDetailList(serviceSubtaskDetailList2);
-                    ssdReq.setGuid(phoneCallReqYQVO.getGuid());
-                    ssdReq.setOrgid(phoneCallReqYQVO.getOrgid());
-                    saveQuestionAnswerPhone(ssdReq);
-                    return phoneCallBackYQVO;
+                    //鏄庣粏鍦ㄦ湰棰樺尮閰嶆垚鍔熸椂宸茶惤搴擄紙瑙佷笂鏂� saveQuestionAnswerPhone锛夛紝杩欓噷涓嶅啀閲嶅淇濆瓨
+                    back = phoneCallBackYQVO;
+                    return back;
                 }
 
                 for (IvrTaskTemplateScript script : ivrTaskTemplateScripts) {
@@ -6298,6 +6323,15 @@
                         redisCache.deleteObject(phoneCallReqYQVO.getTaskid().trim() + "&&" + "mate" + "&&" + phoneCallReqYQVO.getUuid());
                     }
                 }
+                //涓嬩竴棰樿剼鏈病鎵惧埌鏃讹紝鍏滃簳閲嶉棶褰撳墠棰橈紝閬垮厤璋冪敤鏂硅鍒や负鏈鐞嗚�岄��鍥炴鍒欒瘑鍒�
+                if (StringUtils.isEmpty(phoneCallBackYQVO.getValue())) {
+                    log.error("涓嬩竴棰樿剼鏈湭鎵惧埌锛岄噸闂綋鍓嶉锛宯extQuestion锛歿}", nextQuestion);
+                    phoneCallBackYQVO.setType("text");
+                    phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue());
+                    phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + getObject(serviceSubtask, questionText));
+                }
+                back = phoneCallBackYQVO;
+                return back;
             } else if (ivrTaskTemplateScriptVO.getNextScriptno() == null || ivrTaskTemplateScriptVO.getNextScriptno() == 0) {
                 ServiceTask serviceTask1 = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
                 phoneCallBackYQVO.setType("text");
@@ -6326,33 +6360,101 @@
                 //鍦╮edis涓繚瀛樹竴涓嬬粨鏉熻锛屽湪璋冪敤鎸傜數璇濈殑鏂规硶鏃跺垹闄�
                 ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
                 redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "- jsy", serviceTask.getJsy(), 120, TimeUnit.MINUTES);
-//                                return phoneCallBackYQVO;
+                //缁撴潫璇凡鎷艰繘杩斿洖鍊硷紝鎸傛満鐢卞钩鍙版寜杩斿洖鍊兼墽琛�
+                back = phoneCallBackYQVO;
+                return back;
 
             }
         } else {
-            log.info("娌℃湁鍖归厤涓�----------------------------");
-            //flag=0,璇存槑娌� 鍖归厤涓婏紝涔熻鎶婃偅鑰呰鐨勮瘽璁板綍涓嬫潵
-            if (matched == ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().size() - 1 && flag == 0) {
-                ServiceSubTaskDetailReq serviceSubTaskDetailReq = new ServiceSubTaskDetailReq();
-                List<ServiceSubtaskDetail> serviceSubtaskDetailList = new ArrayList<>();
-                ServiceSubtaskDetail serviceSubtaskDetail = getServiceSubtaskDetail(phoneCallReqYQVO, ivrTaskTemplateScriptVO, serviceSubtask, ivrTaskTemplate);
-                //淇敼涓�涓嬭闊宠矾寰勶紙鏀规垚鍓嶇鍙互璁块棶鐨勶紝瀛樺埌鏁版嵁搴撲腑锛�
-                if (StringUtils.isNotEmpty(serviceSubtaskDetail.getQuestionvoice())) {
-                    String questionvoice = serviceSubtaskDetail.getQuestionvoice();
-                    String[] split = questionvoice.split("\\\\");
-                    if (split.length > 0) {
-                        String lastPart = split[split.length - 1];
-                        serviceSubtaskDetail.setQuestionvoice(voicePathPrefix + lastPart);
+            //AI娌℃湁鍖归厤涓婏細鐢盇I鍒嗘敮鑷繁鎸�"娌¢棶娓呭氨閲嶉棶"鐨勬鏁板鐞嗭紝涓嶅啀閫�鍥炴鍒欒瘑鍒�
+            log.info("ai娌℃湁鍖归厤涓�----------------------------");
+            //娌″尮閰嶄笂涔熻鎶婃偅鑰呰鐨勮瘽璁板綍涓嬫潵锛坢atchedtext缃┖锛屼笌姝e垯璺緞鍙e緞涓�鑷达級
+            ServiceSubTaskDetailReq serviceSubTaskDetailReq = new ServiceSubTaskDetailReq();
+            List<ServiceSubtaskDetail> serviceSubtaskDetailList = new ArrayList<>();
+            ServiceSubtaskDetail serviceSubtaskDetail = getServiceSubtaskDetail(phoneCallReqYQVO, ivrTaskTemplateScriptVO, serviceSubtask, ivrTaskTemplate);
+            //淇敼涓�涓嬭闊宠矾寰勶紙鏀规垚鍓嶇鍙互璁块棶鐨勶紝瀛樺埌鏁版嵁搴撲腑锛�
+            if (StringUtils.isNotEmpty(serviceSubtaskDetail.getQuestionvoice())) {
+                String questionvoice = serviceSubtaskDetail.getQuestionvoice();
+                String[] split = questionvoice.split("\\\\");
+                if (split.length > 0) {
+                    String lastPart = split[split.length - 1];
+                    serviceSubtaskDetail.setQuestionvoice(voicePathPrefix + lastPart);
+                }
+            }
+            serviceSubtaskDetailList.add(serviceSubtaskDetail);
+            //濡傛灉娌℃湁 鍖归厤涓婏紝杩欎釜蹇呴』涓簄ull
+            serviceSubtaskDetailList.get(0).setMatchedtext("");
+            serviceSubTaskDetailReq.setServiceSubtaskDetailList(serviceSubtaskDetailList);
+            serviceSubTaskDetailReq.setGuid(phoneCallReqYQVO.getGuid());
+            serviceSubTaskDetailReq.setOrgid(phoneCallReqYQVO.getOrgid());
+            saveQuestionAnswerPhone(serviceSubTaskDetailReq);
+
+            String mateKey = phoneCallReqYQVO.getTaskid().trim() + "&&" + "mate" + "&&" + phoneCallReqYQVO.getUuid();
+            Integer count = null;
+            Object countObj = redisCache.getCacheObject(mateKey);
+            if (ObjectUtils.isNotEmpty(countObj)) count = (Integer) countObj;
+            if (count != null && count >= ivrTaskTemplate.getMateNum()) {
+                //娌″尮閰嶆鏁板凡缁忕敤婊★紝涓嶈兘鍐嶉噸闂簡
+                boolean noNextQuestion = ("0".equals(ivrTaskTemplateScriptVO.getBranchFlag()) || "1".equals(ivrTaskTemplateScriptVO.getBranchFlag()))
+                        && (ivrTaskTemplateScriptVO.getNextScriptno() == null || ivrTaskTemplateScriptVO.getNextScriptno() == 0);
+                if (noNextQuestion) {
+                    //宸茬粡鏄渶鍚庝竴棰橈紝鐩存帴鎸傛満
+                    ServiceTask serviceTask1 = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
+                    phoneCallBackYQVO.setType("text");
+                    phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue());
+                    phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + serviceTask1.getJsy());
+                    //鏇存柊涓�涓嬪垎鏁�
+                    Double score = null;
+                    Object scoreObj = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
+                    if (ObjectUtils.isNotEmpty(scoreObj)) score = (Double) scoreObj;
+                    serviceSubtask.setScore(String.valueOf(score));
+                    serviceSubtask.setFinishtime(new Date());
+                    serviceSubtask.setSendstate(6L);
+                    serviceSubtask.setRemark("鐢佃瘽鎷ㄦ墦宸插畬鎴�");
+                    serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
+                    //璁板綍鐘舵��
+                    setFailPreachForm(serviceSubtask, "3", "鐢佃瘽鎷ㄦ墦宸插畬鎴�", "9");
+                    //鍦╮edis涓繚瀛樹竴涓嬬粨鏉熻锛屽湪璋冪敤鎸傜數璇濈殑鏂规硶鏃跺垹闄�
+                    ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
+                    redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "- jsy", serviceTask.getJsy(), 120, TimeUnit.MINUTES);
+                    //鍘籸edis涓紝鎶婅瀛愪换鍔D鍒犻櫎
+                    Long id = serviceSubtask.getId();
+                    Map<String, String> map = delRedisValue(null, id.toString());
+                    if (ObjectUtils.isNotEmpty(map)) {
+                        redisCache.setCacheObject(map.get("cacheName"), map.get("val"));
+                        redisCache.deleteObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone());
+                        redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "SCORE");
+                    }
+                } else {
+                    //杩樻湁涓嬩竴棰橈紝鎸塶extScriptno缁х画鎻愰棶
+                    for (IvrTaskTemplateScript script : ivrTaskTemplateScripts) {
+                        if (script.getSort() == ivrTaskTemplateScriptVO.getNextScriptno().intValue()) {
+                            phoneCallBackYQVO.setType("text");
+                            phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue());
+                            String scriptContent = StringUtils.isNotEmpty(script.getIvrtext()) ? script.getIvrtext() : script.getScriptContent();
+                            phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + getObject(serviceSubtask, scriptContent));
+                            //灏嗚鎮h�呯殑Redis涓殑棰樼洰ID锛岃繘琛屼慨鏀�
+                            redisCache.setCacheObject(phoneCallReqYQVO.getTaskid().trim() + "-" + phoneCallReqYQVO.getPhone().trim(), script.getId().toString(), 120, TimeUnit.MINUTES);
+                            //鏇存柊涓�涓嬪垎鏁�
+                            Double score = null;
+                            Object scoreObj = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
+                            if (ObjectUtils.isNotEmpty(scoreObj)) score = (Double) scoreObj;
+                            score = BigDecimal.valueOf(score).add(new BigDecimal(script.getScore())).doubleValue();
+                            redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "SCORE", score, 120, TimeUnit.MINUTES);
+                            //鎹㈤鎴愬姛锛屾病鍖归厤娆℃暟娓呴浂
+                            redisCache.deleteObject(mateKey);
+                        }
                     }
                 }
-                serviceSubtaskDetailList.add(serviceSubtaskDetail);
-                //濡傛灉娌℃湁 鍖归厤涓婏紝杩欎釜蹇呴』涓簄ull
-                serviceSubtaskDetailList.get(0).setMatchedtext("");
-                serviceSubTaskDetailReq.setServiceSubtaskDetailList(serviceSubtaskDetailList);
-                serviceSubTaskDetailReq.setGuid(phoneCallReqYQVO.getGuid());
-                serviceSubTaskDetailReq.setOrgid(phoneCallReqYQVO.getOrgid());
-                saveQuestionAnswerPhone(serviceSubTaskDetailReq);
+            } else {
+                //杩樻病闂弧娆℃暟锛岀敤noMatchText寮曞鎮h�呴噸绛�
+                redisCache.setCacheObject(mateKey, count == null ? 1 : count + 1, 120, TimeUnit.MINUTES);
+                phoneCallBackYQVO.setType("text");
+                phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue());
+                phoneCallBackYQVO.setValue(ivrTaskTemplateScriptVO.getNoMatchText() + getObject(serviceSubtask, StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getIvrtext()) ? ivrTaskTemplateScriptVO.getIvrtext() : ivrTaskTemplateScriptVO.getScriptContent()));
             }
+            back = phoneCallBackYQVO;
+            return back;
         }
         return back;
     }

--
Gitblit v1.9.3