From 10aaa035f5be0312304d20f022bdb714a8f4900a Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期三, 11 十二月 2024 22:16:23 +0800
Subject: [PATCH] 代码提交

---
 smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java |  304 ++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 266 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 aca304e..a34347b 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
@@ -4,10 +4,12 @@
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.gson.Gson;
+import com.ruoyi.common.core.domain.entity.SysDictData;
 import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.exception.base.BaseException;
 import com.ruoyi.common.utils.*;
 import com.smartor.common.FtpService;
+import com.smartor.common.SendService;
 import com.smartor.config.PhoneUtils;
 import com.smartor.domain.*;
 import com.smartor.mapper.*;
@@ -21,6 +23,7 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.io.UnsupportedEncodingException;
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
@@ -73,13 +76,22 @@
     private IIvrTaskTemplateScriptService iIvrTaskTemplateScriptService;
 
     @Autowired
+    private IServiceOutPathService iServiceOutPathService;
+
+    @Autowired
     private FtpService ftpService;
 
     @Value("${pri_key}")
     private String pri_key;
 
+    @Value("${pub_key}")
+    private String pub_key;
+
     @Value("${ASRCallBackPath}")
     private String ASRCallBackPath;
+
+    @Autowired
+    private SendService sendService;
 
     @Value("${hangup}")
     private String hangup;
@@ -93,6 +105,14 @@
     @Value("${voicePathPrefix}")
     private String voicePathPrefix;
 
+    @Value("${localIP}")
+    private String localIP;
+
+    @Value("${req_path}")
+    private String req_path;
+
+    @Value("${xhsmsPath}")
+    private String xhsmsPath;
 
     /**
      * 鏌ヨ鍗曚竴浠诲姟锛堥殢璁匡級
@@ -233,13 +253,18 @@
         Integer yc = 0;
         Integer fssb = 0;
         Integer yfs = 0;
-        Integer blq = 0;
+        Integer xj = 0;
+        Integer dfs = 0;
+        Integer ywc = 0;
+        Integer ywc2 = 0;
         for (ServiceSubtask serviceSubtask : selectServiceSubtaskList) {
             if (serviceSubtask.getSendstate() == 4L) wzx = wzx + 1;
             else if (serviceSubtask.getSendstate() != 4L) ysf = ysf + 1;
             if (serviceSubtask.getSendstate() == 5L) fssb = fssb + 1;
             if (serviceSubtask.getSendstate() == 3L) yfs = yfs + 1;
-            if (serviceSubtask.getSendstate() == 1L) blq = blq + 1;
+            if (serviceSubtask.getSendstate() == 1L) xj = xj + 1;
+            if (serviceSubtask.getSendstate() == 2L) dfs = dfs + 1;
+            if (serviceSubtask.getSendstate() == 6L) ywc = ywc + 1;
             if (serviceSubtask.getExcep().equals("1")) yc = yc + 1;
         }
         map.put("wzx", wzx);
@@ -247,8 +272,10 @@
         map.put("yc", yc);
         map.put("fssb", fssb);
         map.put("yfs", yfs);
-        map.put("blq", blq);
-
+        map.put("xj", xj);
+        map.put("dfs", dfs);
+        map.put("ywc", ywc);
+        map.put("yfs2", yfs + ywc);
         return map;
     }
 
@@ -350,13 +377,15 @@
                     //灏嗕换鍔′俊鎭柊澧炲埌闅忚鏈嶅姟琛ㄤ腑
                     serviceSubtask.setSendname(patTaskRelevance.getName());
                     serviceSubtask.setAge(patTaskRelevance.getAge());
+                    serviceSubtask.setLibtemplateid(Long.valueOf(serviceTask.getLibtemplateid()));
                     serviceSubtask.setSfzh(patTaskRelevance.getIdcardno());
                     serviceSubtask.setPhone(patTaskRelevance.getTelcode());
                     serviceSubtask.setAddr(patTaskRelevance.getAddr());
                     serviceSubtask.setPatid(patTaskRelevance.getPatid());
                     serviceSubtask.setCreateTime(DateUtils.getNowDate());
                     serviceSubtask.setSendstate(1L);
-                    if (serviceTaskVO.getLongTask() == 1) serviceSubtask.setSendstate(2L);
+                    if (serviceTaskVO.getLongTask() != null && serviceTaskVO.getLongTask() == 1)
+                        serviceSubtask.setSendstate(2L);
                     serviceSubtask.setDeptcode(patTaskRelevance.getDeptCode());
                     serviceSubtask.setDeptname(patTaskRelevance.getDeptName());
                     serviceSubtask.setLeavehospitaldistrictcode(patTaskRelevance.getLeavehospitaldistrictcode());
@@ -370,7 +399,7 @@
                     serviceSubtask.setEndtime(patTaskRelevance.getEndtime());
                     serviceSubtask.setNurseId(patTaskRelevance.getNurseId());
                     serviceSubtask.setNurseName(patTaskRelevance.getNurseName());
-                    if (serviceTaskVO.getLongTask() == 1)
+                    if (serviceTaskVO.getLongTask() != null && serviceTaskVO.getLongTask() == 1)
                         serviceSubtask.setLongSendTime(patTaskRelevance.getLongSendTime());
                     serviceSubtaskMapper.insertServiceSubtask(serviceSubtask);
                     integer = serviceSubtask.getId().intValue();
@@ -498,6 +527,11 @@
             if (noVoice == ivrTaskTemplateVO.getNoVoiceNum().intValue()) {
                 //宸茬粡闂簡瀵瑰簲鐨勯亶鏁帮紝灏卞垽鏂槸鍚﹁繕鏈変笅涓�棰�
                 if (nowQuestion.getTargetid() == IvrTaskTemplateScriptVOs.size()) {
+                    ServiceSubtask ss = new ServiceSubtask();
+                    ss.setId(serviceSubtask.getId());
+                    ss.setSendstate(5L);
+                    ss.setRemark("鐢佃瘽鏃犲搷搴�");
+                    serviceSubtaskMapper.updateServiceSubtask(ss);
                     //娌℃湁涓嬩竴棰樹簡锛屽氨鎸傛柇鐢佃瘽锛屾挱鏀剧粨鏉熻
                     redisCache.setCacheObject(phoneCallBackVO.getUuid() + "hangup", 1, 120, TimeUnit.MINUTES);
                     phoneUtils.ttsPlayback(ivrTaskTemplateVO.getRevisitAfter(), phoneCallBackVO.getUuid());
@@ -509,7 +543,7 @@
                     // 闂锛�  鍘昏皟鐢ㄢ�渢ts鍚堟垚鍜屾挱鏀锯�濇帴鍙�
                     String date = simpleDateFormat1.format(new Date());
                     log.info("鍘昏皟鐢╰ts鍚堟垚鍜屾挱鏀炬帴鍙�: {},uuid涓猴細{}", date, phoneCallBackVO.getUuid());
-                    phoneUtils.ttsPlayback(nowQuestion.getScriptContent(), phoneCallBackVO.getUuid());
+                    phoneUtils.ttsPlayback(nowQuestion.getIvrtext(), phoneCallBackVO.getUuid());
                 }
             } else {
                 redisCache.setCacheObject(phoneCallBackVO.getUuid() + "noVoice", noVoice + 1, 120, TimeUnit.MINUTES);
@@ -518,7 +552,7 @@
                 //闈欓粯璇濇湳  + 闂锛�  鍘昏皟鐢ㄢ�渢ts鍚堟垚鍜屾挱鏀锯�濇帴鍙�
                 String date = simpleDateFormat1.format(new Date());
                 log.info("闈欓粯璇濇湳  + 闂,鍘昏皟鐢╰ts鍚堟垚鍜屾挱鏀炬帴鍙�: {},uuid涓猴細{}", date, phoneCallBackVO.getUuid());
-                phoneUtils.ttsPlayback(slienceText + nowQuestion.getScriptContent(), phoneCallBackVO.getUuid());
+                phoneUtils.ttsPlayback(slienceText + nowQuestion.getIvrtext(), phoneCallBackVO.getUuid());
                 return;
             }
 
@@ -539,7 +573,7 @@
                     Pattern pattern2 = Pattern.compile(nowQuestion.getIvrTaskScriptTargetoptionList().get(j).getTargetregex2());
                     matcher2 = pattern2.matcher(phoneCallBackVO.getTextResult());
                 }
-                log.error("PCB--getQuestionText闂涓猴細{},UUID锛歿}", nowQuestion.getScriptContent(), phoneCallBackVO.getUuid());
+                log.error("PCB--getQuestionText闂涓猴細{},UUID锛歿}", nowQuestion.getIvrtext(), phoneCallBackVO.getUuid());
                 if (StringUtils.isNotEmpty(nowQuestion.getIvrTaskScriptTargetoptionList().get(j).getTargetregex2()) && matcher2.matches() && StringUtils.isNotEmpty(nowQuestion.getIvrTaskScriptTargetoptionList().get(j).getTargetregex()) && matcher.matches() || StringUtils.isEmpty(nowQuestion.getIvrTaskScriptTargetoptionList().get(j).getTargetregex()) && StringUtils.isNotEmpty(nowQuestion.getIvrTaskScriptTargetoptionList().get(j).getTargetregex2()) && matcher2.matches() || StringUtils.isEmpty(nowQuestion.getIvrTaskScriptTargetoptionList().get(j).getTargetregex2()) && StringUtils.isNotEmpty(nowQuestion.getIvrTaskScriptTargetoptionList().get(j).getTargetregex()) && matcher.matches()) {
                     //璇存槑鍖归厤姝g‘浜�
                     //杩欓噷搴旇鍏堝垽鏂被鍨嬶紝鍘诲啀淇敼锛岃缃甀sUserOperation鏄崟閫夐鐨勬敼娉�
@@ -553,7 +587,7 @@
                     //灏嗘偅鑰呯殑鍥炵鍐欒繘琛ㄩ噷
                     IvrTaskVisitResult serviceTaskVisitResult = DtoConversionUtils.sourceToTarget(serviceSubtask, IvrTaskVisitResult.class);
                     serviceTaskVisitResult.setId(null);
-                    serviceTaskVisitResult.setQuestion(nowQuestion.getScriptContent());
+                    serviceTaskVisitResult.setQuestion(nowQuestion.getIvrtext());
                     serviceTaskVisitResult.setPatientAnswer(phoneCallBackVO.getTextResult());
                     serviceTaskVisitResult.setCreateTime(new Date());
                     serviceTaskVisitResult.setOptionResult(nowQuestion.getIvrTaskScriptTargetoptionList().get(j).getTargetvalue());
@@ -570,10 +604,14 @@
                             questionMessage.setNowQuestion(script);
                             questionMessage.setQuestionList(IvrTaskTemplateScriptVOs);
                             redisCache.setCacheObject(phoneCallBackVO.getUuid() + "returnQues", questionMessage, 120, TimeUnit.MINUTES);
-                            phoneUtils.ttsPlayback(script.getScriptContent(), phoneCallBackVO.getUuid());
+                            phoneUtils.ttsPlayback(script.getIvrtext(), phoneCallBackVO.getUuid());
                             return;
                         } else if (nextQuestion > IvrTaskTemplateScriptVOs.size()) {
                             //娌℃湁涓嬩竴棰樹簡锛屽氨缁撴潫浜�
+                            ServiceSubtask ss = new ServiceSubtask();
+                            ss.setId(serviceSubtask.getId());
+                            ss.setSendstate(6L);
+                            serviceSubtaskMapper.updateServiceSubtask(ss);
                             String date = simpleDateFormat1.format(new Date());
                             log.error("娌℃湁涓嬩竴棰樹簡锛屽氨缁撴潫浜�: {},uuid涓猴細{}", date, phoneCallBackVO.getUuid());
                             redisCache.setCacheObject(phoneCallBackVO.getUuid() + "hangup", 1, 120, TimeUnit.MINUTES);
@@ -611,10 +649,15 @@
                         redisCache.setCacheObject(phoneCallBackVO.getUuid() + "mateNum", 0, 120, TimeUnit.MINUTES);
                         String date = simpleDateFormat1.format(new Date());
                         log.info("濡傛灉涓嬩竴棰樹负绌�.鍒欐柊鐨勬暟鎹繑鍥�,骞跺姞涓婃劅璋㈣: {},uuid涓猴細{}", date, phoneCallBackVO.getUuid());
-                        phoneUtils.ttsPlayback(nextQuestion.getScriptContent(), phoneCallBackVO.getUuid());
+                        phoneUtils.ttsPlayback(nextQuestion.getIvrtext(), phoneCallBackVO.getUuid());
                         return;
                     } else {
                         //灏卞彲浠ユ寕鏂數璇濅簡
+                        ServiceSubtask ss = new ServiceSubtask();
+                        ss.setId(serviceSubtask.getId());
+                        ss.setSendstate(6L);
+                        serviceSubtaskMapper.updateServiceSubtask(ss);
+
                         String date = simpleDateFormat1.format(new Date());
                         log.info("灏卞彲浠ユ寕鏂數璇濅簡------: {},uuid涓猴細{}", date, phoneCallBackVO.getUuid());
                         redisCache.setCacheObject(phoneCallBackVO.getUuid() + "hangup", 1, 120, TimeUnit.MINUTES);
@@ -674,13 +717,13 @@
                         //璋冪敤鈥�15銆乼ts鍚堟垚鍜屾挱鏀撅紝 tts_playback鈥濆皢缁撴灉浼犲洖
                         String date = simpleDateFormat1.format(new Date());
                         log.info("璋冪敤鈥�15銆乼ts鍚堟垚鍜屾挱鏀�------: {},uuid涓猴細{}", date, phoneCallBackVO.getUuid());
-                        phoneUtils.ttsPlayback(nowQuestion.getScriptContent() + ivrTaskTemplateScriptVO.getSubmoduleText(), phoneCallBackVO.getUuid());
+                        phoneUtils.ttsPlayback(nowQuestion.getIvrtext() + ivrTaskTemplateScriptVO.getSubmoduleText(), phoneCallBackVO.getUuid());
                     }
                     break;
                 }
                 String date = simpleDateFormat1.format(new Date());
                 log.info("鏈�鍚庣殑淇℃伅鍥炲-: {},uuid涓猴細{}", date, phoneCallBackVO.getUuid());
-                phoneUtils.ttsPlayback(nowQuestion.getScriptContent(), phoneCallBackVO.getUuid());
+                phoneUtils.ttsPlayback(nowQuestion.getIvrtext(), phoneCallBackVO.getUuid());
             }
         }
     }
@@ -694,12 +737,18 @@
     public PhoneCallBackYQVO phoneCallBackYQ(PhoneCallReqYQVO phoneCallReqYQVO) {
         //鍒ゆ柇鏄惁鎸傛満
         String hangupState = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "- hangup");
-        if (StringUtils.isNotEmpty(hangupState) && hangup.equals("1")) {
+        Object cacheObject1 = redisCache.getCacheObject(phoneCallReqYQVO.getTaskid() + "recordAccept-hungup");
+        if (StringUtils.isNotEmpty(hangupState) && hangup.equals("1") || ObjectUtils.isNotEmpty(cacheObject1) && String.valueOf(cacheObject1).equals("1")) {
             return new PhoneCallBackYQVO();
         }
         if ("AsrCallback".equals(phoneCallReqYQVO.getOperate()) && phoneCallReqYQVO.getEnd_time() != null && phoneCallReqYQVO.getEnd_time() != -1) {
             //澶勭悊鎸傛柇
             if (phoneCallReqYQVO.getAsrtext().contains("鎷ㄥ彨鐨勭敤鎴锋蹇�")) {
+                //鍒ゆ柇 recordAccept-hungup 鏄惁鏈夊�硷紝濡傛灉鏈夛紝鍒欒鏄庝笉鐢ㄥ鐞嗕簡锛屼箣鍓嶅凡缁忓鐞嗚繃浜嗭紙recordAccept-hungup杩欎釜涓昏鏄粰鈥滈�氳瘽璁板綍鐢ㄧ殑锛屸�濓級
+                Object cacheObject = redisCache.getCacheObject(phoneCallReqYQVO.getTaskid() + "recordAccept-hungup");
+                if (ObjectUtils.isNotEmpty(cacheObject) && String.valueOf(cacheObject).equals("1")) {
+                    return new PhoneCallBackYQVO();
+                }
                 ServiceSubtask serviceSubtask2 = new ServiceSubtask();
                 serviceSubtask2.setRemark("鐢佃瘽鍙戦�佹垚鍔燂紙鎮h�呮寕鏂級");
                 serviceSubtask2.setSenduuid(phoneCallReqYQVO.getUuid());
@@ -710,6 +759,11 @@
                 req.put("caller", phoneCallReqYQVO.getPhone());
                 HttpUtil.postJsonRequest(hangup, new Gson().toJson(req));
                 redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "- hangup", "1", 2, TimeUnit.MINUTES);
+                //鍏堟妸榛樿鐨剅ecordAccept-hungup鍒犻櫎锛屽啀鏇存柊
+                redisCache.deleteObject(phoneCallReqYQVO.getTaskid() + "recordAccept-hungup");
+                redisCache.setCacheObject(phoneCallReqYQVO.getTaskid() + "recordAccept-hungup", "1", 10, TimeUnit.MINUTES);
+                //杩欎釜鏃跺�欏氨闇�瑕佽蛋琛ュ伩鏈哄埗浜嗭紝鍏堟殏瀹氳蛋鐭俊
+                getSmsCompensate(Long.valueOf(phoneCallReqYQVO.getTaskid()));
                 return new PhoneCallBackYQVO();
             }
         }
@@ -785,7 +839,7 @@
                 //灏忎笌鐨勮瘽,灏辩户缁棶鎮h��
                 phoneCallBackYQVO.setType("text");
                 phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue());
-                String scriptContent = ivrTaskTemplateScriptVO.getScriptContent();
+                String scriptContent = ivrTaskTemplateScriptVO.getIvrtext();
                 log.error("SilentCallback鐨勯棶棰樺唴瀹箂criptContent锛歿}", scriptContent);
                 phoneCallBackYQVO.setValue(getObject(serviceSubtask, scriptContent));
                 //灏嗛潤榛樻鏁板姞1
@@ -795,6 +849,11 @@
             } else {
                 log.error("闈欓粯娆℃暟杈惧埌,鎸傛帀鐢佃瘽锛歿}", num);
                 ServiceTask serviceTask1 = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
+                ServiceSubtask ss = new ServiceSubtask();
+                ss.setId(serviceSubtask.getId());
+                ss.setSendstate(5L);
+                ss.setRemark("鐢佃瘽闈欓粯");
+                serviceSubtaskMapper.updateServiceSubtask(ss);
                 //澶т笌绛変簬鐨勮瘽,鐩存帴鎸傛柇
                 phoneCallBackYQVO.setType("text");
                 phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue());
@@ -823,7 +882,9 @@
             }
             return phoneCallBackYQVO;
         } else if ("AsrCallback".equals(phoneCallReqYQVO.getOperate()) && phoneCallReqYQVO.getEnd_time() != null && phoneCallReqYQVO.getEnd_time() != -1) {
-
+            //鍋氫竴涓爣璇嗭紝鐢ㄦ潵鍦ㄩ�氳瘽璇︽儏鎺ュ彛閲岋紝鍒ゆ柇鏄惁鏈変汉鎺ョ數璇濓紙value=2,琛ㄧず鏈変汉鎺ワ級
+            redisCache.deleteObject(phoneCallReqYQVO.getTaskid() + "recordAccept-hungup");
+            redisCache.setCacheObject(phoneCallReqYQVO.getTaskid() + "recordAccept-hungup", "2", 10, TimeUnit.MINUTES);
             // 鍏堝閫氳瘽杩涜閫氱敤搴撳尮閰嶄竴娆�
             String extemplateID = ivrTaskTemplate.getSubmoduleID();
             if (StringUtils.isNotEmpty(extemplateID)) {
@@ -858,6 +919,11 @@
                 if (ObjectUtils.isNotEmpty(les)) {
                     //瀵瑰尮閰嶇殑缁撴灉澶勭悊涓�涓�(鐪嬬湅鏄笉鏄渶瑕佹寕鏈�)
                     if (les.getIsEnd() != null && les.getIsEnd() == 1) {
+                        ServiceSubtask ss = new ServiceSubtask();
+                        ss.setId(serviceSubtask.getId());
+                        ss.setSendstate(6L);
+                        ss.setRemark("鐢佃瘽鎷ㄦ墦宸插畬鎴�");
+                        serviceSubtaskMapper.updateServiceSubtask(ss);
                         //鍙互鎸傛満浜�
                         redisCache.deleteObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone());
                         redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "SCORE");
@@ -961,12 +1027,36 @@
                                 score = BigDecimal.valueOf(score).add(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getScore()).doubleValue();
                                 redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "SCORE", score, 120, TimeUnit.MINUTES);
                             }
+                            if (nextQuestion == null || nextQuestion == 0L) {
+                                //濡傛灉涓嬩竴棰樹负绌猴紝鎴栬�呬负0锛屽垯鎸傛満
+                                ServiceSubtask ss = new ServiceSubtask();
+                                ss.setId(serviceSubtask.getId());
+                                ss.setSendstate(6L);
+                                ss.setRemark("鐢佃瘽鎷ㄦ墦宸插畬鎴�");
+                                serviceSubtaskMapper.updateServiceSubtask(ss);
+                                redisCache.deleteObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone());
+                                redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "SCORE");
+                                redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "PlayEventCallbackPlaystop");
+                                redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "noVoice");
+                                //鍦╮edis涓繚瀛樹竴涓嬬粨鏉熻锛屽湪璋冪敤鎸傜數璇濈殑鏂规硶鏃跺垹闄�
+                                ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
+                                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);
+                                saveQuestionAnswerPhone(ssdReq);
+                                return phoneCallBackYQVO;
+                            }
 
                             for (IvrTaskTemplateScript script : ivrTaskTemplateScripts) {
                                 if (script.getSort() == nextQuestion.intValue()) {
                                     phoneCallBackYQVO.setType("text");
                                     phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue());
-                                    String scriptContent = script.getScriptContent();
+                                    String scriptContent = script.getIvrtext();
                                     log.error("涓嬩竴棰橀棶棰橈細{}", scriptContent);
                                     phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + getObject(serviceSubtask, scriptContent));
                                     //灏嗚鎮h�呯殑Redis涓殑棰樼洰ID锛岃繘琛屼慨鏀�
@@ -985,6 +1075,8 @@
                             if (ObjectUtils.isNotEmpty(scoreObj)) score = (double) scoreObj;
                             serviceSubtask.setScore(BigDecimal.valueOf(score));
                             serviceSubtask.setFinishtime(new Date());
+                            serviceSubtask.setSendstate(6L);
+                            serviceSubtask.setRemark("鐢佃瘽鎷ㄦ墦宸插畬鎴�");
                             serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
                             //璁剧疆缁撴潫璇�
                             phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + serviceTask1.getJsy());
@@ -1049,6 +1141,8 @@
                             if (ObjectUtils.isNotEmpty(scoreObj)) score = (Double) scoreObj;
                             serviceSubtask.setScore(BigDecimal.valueOf(score));
                             serviceSubtask.setFinishtime(new Date());
+                            serviceSubtask.setSendstate(6L);
+                            serviceSubtask.setRemark("鐢佃瘽鎷ㄦ墦宸插畬鎴�");
                             serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
 
                             //鍦╮edis涓繚瀛樹竴涓嬬粨鏉熻锛屽湪璋冪敤鎸傜數璇濈殑鏂规硶鏃跺垹闄�
@@ -1067,7 +1161,7 @@
                                 if (script.getSort() == ivrTaskTemplateScriptVO.getNextScriptno().intValue()) {
                                     phoneCallBackYQVO.setType("text");
                                     phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue());
-                                    String scriptContent = script.getScriptContent();
+                                    String scriptContent = script.getIvrtext();
                                     phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + getObject(serviceSubtask, scriptContent));
                                     //灏嗚鎮h�呯殑Redis涓殑棰樼洰ID锛岃繘琛屼慨鏀�
                                     redisCache.setCacheObject(phoneCallReqYQVO.getTaskid().trim() + "-" + phoneCallReqYQVO.getPhone().trim(), script.getId().toString(), 120, TimeUnit.MINUTES);
@@ -1089,7 +1183,7 @@
                             redisCache.setCacheObject(phoneCallReqYQVO.getTaskid().trim() + "&&" + "mate" + "&&" + phoneCallReqYQVO.getUuid(), count + 1, 120, TimeUnit.MINUTES);
 
                         phoneCallBackYQVO.setType("text");
-                        phoneCallBackYQVO.setValue(ivrTaskTemplateScriptVO.getNoMatchText() + getObject(serviceSubtask, ivrTaskTemplateScriptVO.getScriptContent()));
+                        phoneCallBackYQVO.setValue(ivrTaskTemplateScriptVO.getNoMatchText() + getObject(serviceSubtask, ivrTaskTemplateScriptVO.getIvrtext()));
                     }
                 }
 
@@ -1119,7 +1213,7 @@
                         if (ivrTaskTemplateScriptVO.getNextScriptno().intValue() == ivrTaskTemplateScript1.getSort()) {
                             phoneCallBackYQVO.setType("text");
                             phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue());
-                            String scriptContent = ivrTaskTemplateScript1.getScriptContent();
+                            String scriptContent = ivrTaskTemplateScript1.getIvrtext();
                             phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + getObject(serviceSubtask, scriptContent));
                             redisCache.deleteObject(phoneCallReqYQVO.getTaskid().trim() + "&&" + "mate" + "&&" + phoneCallReqYQVO.getUuid());
                             redisCache.setCacheObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone(), ivrTaskTemplateScript1.getId().toString());
@@ -1146,6 +1240,8 @@
                     if (ObjectUtils.isNotEmpty(scoreObj)) score = (Double) scoreObj;
                     serviceSubtask.setScore(BigDecimal.valueOf(score));
                     serviceSubtask.setFinishtime(new Date());
+                    serviceSubtask.setRemark("鐢佃瘽鎷ㄦ墦宸插畬鎴�");
+                    serviceSubtask.setSendstate(6L);
                     serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
 
                     //鍘籸edis涓紝鎶婅瀛愪换鍔D鍒犻櫎
@@ -1285,7 +1381,7 @@
         //鏍规嵁,鑾峰彇瀛愪换鍔$殑ID
         String[] split = subIds.split(",,");
         for (int i = 0; i < split.length; i++) {
-            if (cacheName.equals("cache-0") && i < 5 || !cacheName.equals("cache-0") && i < 1) {
+            if (cacheName.equals("cache-0") && i < split.length || !cacheName.equals("cache-0") && i < 1) {
                 PullTaskVO pullTaskVO = new PullTaskVO();
                 String subId = split[i].trim().replace(",", "");
                 ServiceSubtask serviceSubtask = serviceSubtaskMapper.selectServiceSubtaskById(Long.valueOf(subId));
@@ -1307,7 +1403,7 @@
                 //濡傛灉ivrTaskTemplateScript涓虹┖锛屼篃灏辨病鏈夊線涓嬫墽琛岀殑蹇呰浜�
                 if (ObjectUtils.isEmpty(ivrTaskTemplateScript)) return null;
                 //鑾峰彇閫氶厤绗﹀尮閰嶈繃鍚庣殑闂
-                String scrContent = getObject(serviceSubtask, ivrTaskTemplateScript.getScriptContent());
+                String scrContent = getObject(serviceSubtask, ivrTaskTemplateScript.getIvrtext());
                 String kcb = serviceTask.getKcb() + "," + scrContent;
 //                String kcb = ivrTaskTemplate.getRevisitBefore();
 
@@ -1595,19 +1691,21 @@
                 i = serviceSubtaskDetailMapper.insertServiceSubtaskDetail(serviceSubtaskDetail);
             }
         } else {
-            for (ServiceSubtaskDetail serviceSubtaskDetail : serviceSubTaskDetailReq.getServiceSubtaskDetailList()) {
-                serviceSubtaskDetail.setCreateTime(new Date());
-                //鍏堟牴鎹瓙浠诲姟id,浠诲姟ID鍜岄棶棰樺簭鍙锋煡璇竴涓嬶紝璇ラ棶棰樻槸鍚﹀凡缁忔湁鍊硷紝濡傛灉鏈夊�硷紝鐩存帴淇敼锛屽鏋滀负绌猴紝鐩存帴鎻掑叆
-                ServiceSubtaskDetail ssd = new ServiceSubtaskDetail();
-                ssd.setSubId(serviceSubtaskDetail.getSubId());
-                ssd.setTaskid(serviceSubtaskDetail.getTaskid());
-                ssd.setTemplatequestionnum(serviceSubtaskDetail.getTemplatequestionnum());
-                List<ServiceSubtaskDetail> serviceSubtaskDetails = serviceSubtaskDetailMapper.selectServiceSubtaskDetailList(ssd);
-                if (CollectionUtils.isNotEmpty(serviceSubtaskDetails) && StringUtils.isNotEmpty(serviceSubtaskDetails.get(0).getMatchedtext())) {
-                    serviceSubtaskDetail.setId(serviceSubtaskDetails.get(0).getId());
-                    serviceSubtaskDetailMapper.updateServiceSubtaskDetail(serviceSubtaskDetail);
-                } else {
-                    i = serviceSubtaskDetailMapper.insertServiceSubtaskDetail(serviceSubtaskDetail);
+            if (serviceSubTaskDetailReq != null && CollectionUtils.isNotEmpty(serviceSubTaskDetailReq.getServiceSubtaskDetailList())) {
+                for (ServiceSubtaskDetail serviceSubtaskDetail : serviceSubTaskDetailReq.getServiceSubtaskDetailList()) {
+                    serviceSubtaskDetail.setCreateTime(new Date());
+                    //鍏堟牴鎹瓙浠诲姟id,浠诲姟ID鍜岄棶棰樺簭鍙锋煡璇竴涓嬶紝璇ラ棶棰樻槸鍚﹀凡缁忔湁鍊硷紝濡傛灉鏈夊�硷紝鐩存帴淇敼锛屽鏋滀负绌猴紝鐩存帴鎻掑叆
+                    ServiceSubtaskDetail ssd = new ServiceSubtaskDetail();
+                    ssd.setSubId(serviceSubtaskDetail.getSubId());
+                    ssd.setTaskid(serviceSubtaskDetail.getTaskid());
+                    ssd.setTemplatequestionnum(serviceSubtaskDetail.getTemplatequestionnum());
+                    List<ServiceSubtaskDetail> serviceSubtaskDetails = serviceSubtaskDetailMapper.selectServiceSubtaskDetailList(ssd);
+                    if (CollectionUtils.isNotEmpty(serviceSubtaskDetails) && StringUtils.isNotEmpty(serviceSubtaskDetails.get(0).getMatchedtext())) {
+                        serviceSubtaskDetail.setId(serviceSubtaskDetails.get(0).getId());
+                        serviceSubtaskDetailMapper.updateServiceSubtaskDetail(serviceSubtaskDetail);
+                    } else {
+                        i = serviceSubtaskDetailMapper.insertServiceSubtaskDetail(serviceSubtaskDetail);
+                    }
                 }
             }
         }
@@ -1616,15 +1714,40 @@
 
     @Override
     public Integer recordAccept(PhoneCallRecordVO phoneCallRecordVO) {
-        if (phoneCallRecordVO.getAnswered() != null && phoneCallRecordVO.getAnswered() == true) {
+        Object cacheObject = redisCache.getCacheObject(phoneCallRecordVO.getTaskid() + "recordAccept-hungup");
+        if (phoneCallRecordVO.getHangup_cause().equals("NO_USER_RESPONSE") || ObjectUtils.isNotEmpty(cacheObject) && String.valueOf(cacheObject).equals("1")) {
+            //鏃犱汉鎺ュ惉
+            getSmsCompensate(Long.valueOf(phoneCallRecordVO.getTaskid()));
+            redisCache.deleteObject(phoneCallRecordVO.getTaskid() + "recordAccept-hungup");
+        } else if (ObjectUtils.isNotEmpty(cacheObject) && String.valueOf(cacheObject).equals("2")) {
+//        if (phoneCallRecordVO.getAnswered() != null && phoneCallRecordVO.getAnswered() == true) {
             log.error("鏈変汉鎺ョ數璇濅簡锛屽苟涓斿畬浜�");
             //璇存槑鏈変汉鎺ヤ簡
             int startIndex = phoneCallRecordVO.getRecord_path().indexOf("voice") + "voice".length() + 1;  // 鍔�1鏄烦杩�/绗﹀彿
             int endIndex = phoneCallRecordVO.getRecord_path().lastIndexOf("/");
             String result = phoneCallRecordVO.getRecord_path().substring(startIndex, endIndex);
+            ServiceSubtask serviceSubtask = new ServiceSubtask();
+            serviceSubtask.setRemark("鐢佃瘽鎷ㄦ墦宸插畬鎴�");
+            serviceSubtask.setSendstate(6L);
+            serviceSubtask.setId(Long.valueOf(phoneCallRecordVO.getTaskid()));
+            serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
             //涓嬭浇鏂囦欢
             ftpService.downloadFolder("/" + LocalDate.now().toString(), profile + "/upload/vadio/voice/" + LocalDate.now().toString());
+            redisCache.deleteObject(phoneCallRecordVO.getTaskid() + "recordAccept-hungup");
+        } else {
+            //鎮h�呮嫆缁濋殢璁�
+            ServiceSubtask serviceSubtask = new ServiceSubtask();
+            serviceSubtask.setRemark("鐢佃瘽鎺ラ�氭垚鍔燂紝鎮h�呮嫆缁濋殢璁�");
+            serviceSubtask.setId(Long.valueOf(phoneCallRecordVO.getTaskid()));
+            serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
+            int startIndex = phoneCallRecordVO.getRecord_path().indexOf("voice") + "voice".length() + 1;  // 鍔�1鏄烦杩�/绗﹀彿
+            int endIndex = phoneCallRecordVO.getRecord_path().lastIndexOf("/");
+            String result = phoneCallRecordVO.getRecord_path().substring(startIndex, endIndex);
+            //涓嬭浇鏂囦欢
+            ftpService.downloadFolder("/" + LocalDate.now().toString(), profile + "/upload/vadio/voice/" + LocalDate.now().toString());
+            redisCache.deleteObject(phoneCallRecordVO.getTaskid() + "recordAccept-hungup");
         }
+
         return 1;
     }
 
@@ -1658,6 +1781,80 @@
             result2 = result;
         }
         return result2;
+    }
+
+    /**
+     * 鑾峰彇闅忚缁熻姣斾緥
+     *
+     * @param serviceSubtaskCountReq
+     * @return
+     */
+    @Override
+    public List<ServiceSubtaskStatistic> getSfStatistics(ServiceSubtaskCountReq serviceSubtaskCountReq) {
+        log.error("getSfStatistics鐨勫叆鍙備负锛歿}", serviceSubtaskCountReq);
+        List<ServiceSubtaskStatistic> serviceSubtaskStatistics = new ArrayList<>();
+        Map<String, List<ServiceSubtask>> collect = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq).stream().collect(Collectors.groupingBy(ServiceSubtask::getLeavehospitaldistrictname));
+        for (List<ServiceSubtask> serviceSubtaskList : collect.values()) {
+            if (CollectionUtils.isEmpty(serviceSubtaskList)) {
+                continue;
+            }
+            ServiceSubtaskStatistic statistic = getStatistic(serviceSubtaskList);
+            if (ObjectUtils.isNotEmpty(statistic)) {
+                serviceSubtaskStatistics.add(statistic);
+            }
+        }
+        return serviceSubtaskStatistics;
+    }
+
+    private ServiceSubtaskStatistic getStatistic(List<ServiceSubtask> serviceSubtaskList) {
+        ServiceSubtaskStatistic serviceSubtaskStatistic = new ServiceSubtaskStatistic();
+        serviceSubtaskStatistic.setLeavehospitaldistrictname(serviceSubtaskList.get(0).getLeavehospitaldistrictname());
+        serviceSubtaskStatistic.setLeavehospitaldistrictcode(serviceSubtaskList.get(0).getLeavehospitaldistrictcode());
+        serviceSubtaskStatistic.setServiceCount(serviceSubtaskList.size());
+        for (ServiceSubtask serviceSubtask : serviceSubtaskList) {
+            //涓嶉殢璁挎暟閲�
+            if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 4) {
+                serviceSubtaskStatistic.setBzxCount(serviceSubtaskStatistic.getBzxCount() + 1L);
+            }
+            //搴旈殢璁挎暟閲�
+            if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() != 4) {
+                serviceSubtaskStatistic.setYsfCount(serviceSubtaskStatistic.getYsfCount() + 1L);
+            }
+            //鍙戦�佸け璐ユ暟閲�
+            if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 5) {
+                serviceSubtaskStatistic.setFssbCount(serviceSubtaskStatistic.getFssbCount() + 1L);
+            }
+            //寰呭彂閫佹暟閲�
+            if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 2) {
+                serviceSubtaskStatistic.setDfsCount(serviceSubtaskStatistic.getDfsCount() + 1L);
+            }
+            //宸插彂閫佹暟閲�
+            if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 3) {
+                serviceSubtaskStatistic.setYfsCount(serviceSubtaskStatistic.getYfsCount() + 1L);
+            }
+            //宸插畬鎴愭暟閲�
+            if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 6) {
+                //宸插彂閫侊紝鍖呭惈宸插畬鎴�
+                serviceSubtaskStatistic.setYfsCount(serviceSubtaskStatistic.getYfsCount() + 1L);
+                serviceSubtaskStatistic.setYwcCount(serviceSubtaskStatistic.getYwcCount() + 1L);
+            }
+
+            if (StringUtils.isNotEmpty(serviceSubtask.getExcep()) && serviceSubtask.getExcep().equals("1")) {
+                //寮傚父鏍囪瘑
+                serviceSubtaskStatistic.setYczs(serviceSubtaskStatistic.getYczs() + 1L);
+
+            }
+
+        }
+        //闅忚瀹屾垚鐜�=宸插彂閫�/闅忚鏁�
+        if (serviceSubtaskStatistic.getYfsCount() == 0 || CollectionUtils.isEmpty(serviceSubtaskList)) {
+            serviceSubtaskStatistic.setSfwcl("0");
+        } else {
+            BigDecimal multiply = BigDecimal.valueOf(serviceSubtaskStatistic.getYfsCount()).divide(BigDecimal.valueOf(serviceSubtaskList.size()), 2, BigDecimal.ROUND_HALF_UP);
+            serviceSubtaskStatistic.setSfwcl(multiply.toString());
+        }
+
+        return serviceSubtaskStatistic;
     }
 
     private IvrTaskTemplateScriptVO getNextQuestion(List<IvrTaskTemplateScriptVO> IvrTaskTemplateScriptVOList, IvrTaskTemplateScriptVO IvrTaskTemplateScriptVO) {
@@ -1694,7 +1891,7 @@
         serviceSubtaskDetail.setSentEnd(1L);
         serviceSubtaskDetail.setTemplateid(ivrTaskTemplate.getId().toString());
         serviceSubtaskDetail.setTemplatequestionnum(ivrTaskTemplateScriptVO.getId());
-        serviceSubtaskDetail.setQuestiontext(ivrTaskTemplateScriptVO.getScriptContent());
+        serviceSubtaskDetail.setQuestiontext(ivrTaskTemplateScriptVO.getIvrtext());
         serviceSubtaskDetail.setQuestionvoice(phoneCallReqYQVO.getRecordpath());
         serviceSubtaskDetail.setCategoryname(ivrTaskTemplateScriptVO.getScriptType());
         serviceSubtaskDetail.setTargetoptions(ivrTaskTemplateScriptVO.getTargetOptions());
@@ -1716,4 +1913,35 @@
         return serviceSubtaskDetail;
     }
 
+    private void getSmsCompensate(Long subTaskId) {
+        ServiceSubtask serviceSubtask = serviceSubtaskMapper.selectServiceSubtaskById(subTaskId);
+        RSAPublicKeyExample rsaPublicKeyExample = new RSAPublicKeyExample();
+        String taskId = rsaPublicKeyExample.encryptedData(serviceSubtask.getTaskid().toString(), pub_key);
+        String patid = rsaPublicKeyExample.encryptedData(serviceSubtask.getPatid().toString(), pub_key);
+        ServiceOutPath serviceOutPath = new ServiceOutPath();
+        serviceOutPath.setParam1(taskId);
+        serviceOutPath.setParam2(patid);
+        serviceOutPath.setCreateTime(new Date());
+        iServiceOutPathService.insertServiceOutPath(serviceOutPath);
+        //杞垚16杩涘埗
+        String format = String.format("%03X", serviceOutPath.getId());
+        serviceOutPath.setRadix(format);
+        serviceOutPath.setUpdateTime(new Date());
+        iServiceOutPathService.updateServiceOutPath(serviceOutPath);
+        SendMagParam sendMagParam = new SendMagParam();
+        sendMagParam.setUrl(localIP + ":" + req_path + "/sf?p=" + format);
+        sendMagParam.setContent("銆愭柊鍗庡尰闄€�戞偍濂斤紝閭�璇锋偍濉啓鍑洪櫌闅忚璋冩煡琛紝璇风偣鍑�" + sendMagParam.getUrl() + "濉啓銆傛劅璋㈡偍閰嶅悎锛�");
+        Map<String, String> map = new HashMap<>();
+        map.put("phone", serviceSubtask.getPhone());
+        map.put("content", sendMagParam.getContent());
+        String result = HttpUtil.postJsonRequest(xhsmsPath, new Gson().toJson(map));
+        redisCache.setCacheObject(subTaskId + "recordAccept-hungup", "1", 10, TimeUnit.MINUTES);
+        if (StringUtils.isNotEmpty(serviceSubtask.getRemark())) serviceSubtask.setRemark("鐢佃瘽鍙戦�佹嫆鎺�,鐭俊琛ュ伩鍙戦�佹垚鍔�");
+        else serviceSubtask.setRemark("鐭俊琛ュ伩鍙戦�佹垚鍔�");
+        //璁板綍涓�涓嬭ˉ鍋挎柟寮�
+        if (StringUtils.isNotEmpty(serviceSubtask.getPreachform())) {
+            serviceSubtask.setPreachform(serviceSubtask.getPreachform() + ",1");
+        }
+        serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
+    }
 }

--
Gitblit v1.9.3