From 195190571e567602d5e4e8ae3c7c490a515719ef Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期二, 08 十月 2024 15:43:04 +0800
Subject: [PATCH] 代码提交

---
 smartor/src/main/resources/mapper/smartor/ServiceTaskMapper.xml                          |    6 
 smartor/src/main/java/com/smartor/service/IServiceSubtaskService.java                    |    4 
 smartor/src/main/java/com/smartor/yiwudataanalysis/ADT_A03.java                          |   11 
 smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml                       |   11 
 smartor/src/main/resources/mapper/smartor/SvyTaskTemplateMapper.xml                      |    2 
 smartor/src/main/java/com/smartor/domain/PatMedInhospVO.java                             |   24 +
 smartor/src/main/java/com/smartor/domain/ServiceTask.java                                |   13 
 smartor/src/main/resources/mapper/smartor/PatArchiveMapper.xml                           |    4 
 smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml                         |   22 +
 ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java                             |    2 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java |   22 +
 smartor/src/main/java/com/smartor/domain/PatMedInhosp.java                               |   24 +
 smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java            |  583 +++++++++++++++++++++++++++++++++++++++--
 smartor/src/main/java/com/smartor/service/impl/ServiceTaskServiceImpl.java               |   17 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskController.java    |    8 
 smartor/src/main/java/com/smartor/service/impl/ServiceThirdDataServiceImpl.java          |    9 
 smartor/src/main/java/com/smartor/domain/ServiceSubtaskVO.java                           |   27 +
 17 files changed, 722 insertions(+), 67 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java
index 7a0b1e6..e66deca 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java
@@ -25,6 +25,7 @@
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 鍗曚竴浠诲姟锛堥殢璁匡級Controller
@@ -46,19 +47,26 @@
     @ApiOperation("鏌ヨ鎮h�呴殢璁夸俊鎭�")
     //@PreAuthorize("@ss.hasPermi('system:taskcall:list')")
     @PostMapping("/patItem")
-    public TableDataInfo patItem(@RequestBody ServiceSubtask ivrTaskcall) {
-        PageUtils.startPageByPost(ivrTaskcall.getPageNum(), ivrTaskcall.getPageSize());
-        List<ServiceSubtask> serviceSubtaskList = serviceSubtaskService.patItem(ivrTaskcall);
+    public TableDataInfo patItem(@RequestBody ServiceSubtaskVO serviceSubtaskVO) {
+        List<ServiceSubtask> serviceSubtaskList = null;
+        if (serviceSubtaskVO != null) {
+            PageUtils.startPageByPost(serviceSubtaskVO.getPageNum(), serviceSubtaskVO.getPageSize());
+            serviceSubtaskList = serviceSubtaskService.patItem(serviceSubtaskVO);
+        }
+        Map<String, Object> map = serviceSubtaskService.patItemCount(serviceSubtaskVO);
+        map.put("serviceSubtaskList", serviceSubtaskList);
+        List<Map<String, Object>> list = new ArrayList<>();
+        list.add(map);
         //鑾峰彇total
         long total = PageUtils.count(new ISelect() {
             @Override
             public void doSelect() {
-                ivrTaskcall.setPageNum(null);
-                ivrTaskcall.setPageSize(null);
-                serviceSubtaskService.patItem(ivrTaskcall);
+                serviceSubtaskVO.setPageNum(null);
+                serviceSubtaskVO.setPageSize(null);
+                serviceSubtaskService.patItem(serviceSubtaskVO);
             }
         });
-        return getDataTable2(total, serviceSubtaskList);
+        return getDataTable2(total, list);
 //        return getDataTable(serviceSubtaskService.patItem(ivrTaskcall));
     }
 
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskController.java
index 87c4538..e117cc3 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskController.java
@@ -67,9 +67,11 @@
 
         if (CollectionUtils.isNotEmpty(serviceTaskVOS)) {
             for (ServiceTaskVO ServiceTaskVO : serviceTaskVOS) {
-                ServiceSubtaskVO ServiceTaskcall = new ServiceSubtaskVO();
-                ServiceTaskcall.setTaskid(ServiceTaskVO.getTaskid());
-                List<ServiceSubtask> ServiceTaskcalls = iServiceTaskCallService.selectServiceSubtaskList(ServiceTaskcall);
+                ServiceSubtaskVO serviceSubtaskVO = new ServiceSubtaskVO();
+                serviceSubtaskVO.setTaskid(ServiceTaskVO.getTaskid());
+                serviceSubtaskVO.setStartOutHospTime(serviceTask.getStartOutHospTime());
+                serviceSubtaskVO.setEndOutHospTime(serviceTask.getEndOutHospTime());
+                List<ServiceSubtask> ServiceTaskcalls = iServiceTaskCallService.selectServiceSubtaskList(serviceSubtaskVO);
                 if (CollectionUtils.isNotEmpty(ServiceTaskcalls)) {
                     //宸插彂閫�
                     long yfs = ServiceTaskcalls.stream().filter(serviceTaskcall1 -> serviceTaskcall1.getSendstate() != null && serviceTaskcall1.getSendstate() == 3L).collect(Collectors.toList()).stream().count();
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
index f55613d..02e8c7f 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
@@ -402,6 +402,7 @@
                                     serviceSubtask.setResult("success");
                                 } else {
                                     serviceSubtask.setResult("error");
+                                    serviceSubtask.setSendstate(5L);
                                     serviceSubtask.setRemark(map.get("msg").toString());
                                 }
                                 iServiceSubtaskService.updateServiceSubtask(serviceSubtask);
@@ -615,6 +616,7 @@
 
         String result = HttpUtils.sendPost(thirdWXUrl, new Gson().toJson(xinHuaWXReq));
         JSONObject jsonObject = JSONObject.parseObject(result);
+        log.error("jsonObject鐨勬暟鎹负锛歿}", jsonObject.toString());
 //        String code = (String) jsonObject.get("code");
         return jsonObject.toString();
     }
diff --git a/smartor/src/main/java/com/smartor/domain/PatMedInhosp.java b/smartor/src/main/java/com/smartor/domain/PatMedInhosp.java
index b3c036c..09472de 100644
--- a/smartor/src/main/java/com/smartor/domain/PatMedInhosp.java
+++ b/smartor/src/main/java/com/smartor/domain/PatMedInhosp.java
@@ -346,4 +346,28 @@
      */
     @ApiModelProperty(value = "鍑洪櫌绉戝浠g爜闆嗗悎")
     private List<String> leaveldeptcodes;
+
+    /**
+     * 寮�濮嬪嚭闄㈡棩鏈�
+     */
+    @ApiModelProperty(value = "寮�濮嬪嚭闄㈡棩鏈�")
+    private Date startOutHospTime;
+
+    /**
+     * 缁撴潫鍑洪櫌鏃ユ湡
+     */
+    @ApiModelProperty(value = "缁撴潫鍑洪櫌鏃ユ湡")
+    private Date endOutHospTime;
+
+    /**
+     * 寮�濮嬪叆闄㈡棩鏈�
+     */
+    @ApiModelProperty(value = "寮�濮嬪叆闄㈡棩鏈�")
+    private Date startInHospTime;
+
+    /**
+     * 缁撴潫鍏ラ櫌鏃ユ湡
+     */
+    @ApiModelProperty(value = "缁撴潫鍏ラ櫌鏃ユ湡")
+    private Date endInHospTime;
 }
diff --git a/smartor/src/main/java/com/smartor/domain/PatMedInhospVO.java b/smartor/src/main/java/com/smartor/domain/PatMedInhospVO.java
index 746f835..539e3bf 100644
--- a/smartor/src/main/java/com/smartor/domain/PatMedInhospVO.java
+++ b/smartor/src/main/java/com/smartor/domain/PatMedInhospVO.java
@@ -305,4 +305,28 @@
     @ApiModelProperty("pageSize")
     private Integer pageSize;
 
+    /**
+     * 寮�濮嬪嚭闄㈡棩鏈�
+     */
+    @ApiModelProperty(value = "寮�濮嬪嚭闄㈡棩鏈�")
+    private Date startOutHospTime;
+
+    /**
+     * 缁撴潫鍑洪櫌鏃ユ湡
+     */
+    @ApiModelProperty(value = "缁撴潫鍑洪櫌鏃ユ湡")
+    private Date endOutHospTime;
+
+
+    /**
+     * 寮�濮嬪叆闄㈡棩鏈�
+     */
+    @ApiModelProperty(value = "寮�濮嬪叆闄㈡棩鏈�")
+    private Date startInHospTime;
+
+    /**
+     * 缁撴潫鍏ラ櫌鏃ユ湡
+     */
+    @ApiModelProperty(value = "缁撴潫鍏ラ櫌鏃ユ湡")
+    private Date endInHospTime;
 }
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskVO.java b/smartor/src/main/java/com/smartor/domain/ServiceSubtaskVO.java
index 41a9cc7..68b6d59 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskVO.java
+++ b/smartor/src/main/java/com/smartor/domain/ServiceSubtaskVO.java
@@ -566,4 +566,31 @@
     private Date starttime;
 
 
+    /**
+     * pageNum
+     */
+    @Excel(name = "pageNum")
+    @ApiModelProperty(value = "pageNum")
+    private Integer pageNum;
+
+    /**
+     * pageSize
+     */
+    @Excel(name = "pageSize")
+    @ApiModelProperty(value = "pageSize")
+    private Integer pageSize;
+
+    /**
+     * 寮�濮嬪嚭闄㈡棩鏈�
+     */
+    @ApiModelProperty(value = "寮�濮嬪嚭闄㈡棩鏈�")
+    private Date startOutHospTime;
+
+    /**
+     * 缁撴潫鍑洪櫌鏃ユ湡
+     */
+    @ApiModelProperty(value = "缁撴潫鍑洪櫌鏃ユ湡")
+    private Date endOutHospTime;
+
+
 }
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceTask.java b/smartor/src/main/java/com/smartor/domain/ServiceTask.java
index 02e15b8..983608a 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceTask.java
+++ b/smartor/src/main/java/com/smartor/domain/ServiceTask.java
@@ -378,4 +378,17 @@
     @ApiModelProperty(value = "鍑洪櫌鐥呭尯鍚嶇О")
     @Excel(name = " 鍑洪櫌鐥呭尯鍚嶇О ")
     private String leavehospitaldistrictname;
+
+
+    /**
+     * 寮�濮嬪嚭闄㈡棩鏈�
+     */
+    @ApiModelProperty(value = "寮�濮嬪嚭闄㈡棩鏈�")
+    private Date startOutHospTime;
+
+    /**
+     * 缁撴潫鍑洪櫌鏃ユ湡
+     */
+    @ApiModelProperty(value = "缁撴潫鍑洪櫌鏃ユ湡")
+    private Date endOutHospTime;
 }
diff --git a/smartor/src/main/java/com/smartor/service/IServiceSubtaskService.java b/smartor/src/main/java/com/smartor/service/IServiceSubtaskService.java
index d3bc43c..a244e8d 100644
--- a/smartor/src/main/java/com/smartor/service/IServiceSubtaskService.java
+++ b/smartor/src/main/java/com/smartor/service/IServiceSubtaskService.java
@@ -40,7 +40,9 @@
     /**
      * 鏌ヨ鎮h�呴殢璁夸俊鎭�
      */
-    public List<ServiceSubtask> patItem(ServiceSubtask ServiceSubtask);
+    public List<ServiceSubtask> patItem(ServiceSubtaskVO serviceSubtaskVO);
+
+    public Map<String, Object> patItemCount(ServiceSubtaskVO serviceSubtaskVO);
 
     /**
      * 鏂板鍗曚竴浠诲姟锛堥殢璁匡級
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 2d4efa9..fa93511 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 afu.org.checkerframework.checker.oigj.qual.O;
 import com.alibaba.fastjson2.JSON;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -9,6 +10,7 @@
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.DtoConversionUtils;
 import com.ruoyi.common.utils.RSAPublicKeyExample;
+import com.ruoyi.common.utils.SecurityUtils;
 import com.smartor.config.PhoneUtils;
 import com.smartor.domain.*;
 import com.smartor.mapper.*;
@@ -25,16 +27,17 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
+import java.time.LocalDate;
 import java.time.LocalTime;
+import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
-
-import static cn.hutool.poi.excel.sax.AttributeName.r;
-import static cn.hutool.poi.excel.sax.AttributeName.s;
+import java.util.stream.Collectors;
 
 /**
  * 鍗曚竴浠诲姟锛堥殢璁匡級Service涓氬姟灞傚鐞�
@@ -89,23 +92,27 @@
     /**
      * 鏌ヨ鍗曚竴浠诲姟锛堥殢璁匡級鍒楄〃
      *
-     * @param ServiceSubtask 鍗曚竴浠诲姟锛堥殢璁匡級
+     * @param serviceSubtaskVO 鍗曚竴浠诲姟锛堥殢璁匡級
      * @return 鍗曚竴浠诲姟锛堥殢璁匡級
      */
     @Override
-    public List<ServiceSubtask> selectServiceSubtaskList(ServiceSubtask ServiceSubtask) {
-        return serviceSubtaskMapper.selectServiceSubtaskList(ServiceSubtask);
+    public List<ServiceSubtask> selectServiceSubtaskList(ServiceSubtaskVO serviceSubtaskVO) {
+        return serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO);
     }
 
     @Override
-    public ServiceTaskVO queryTaskByCondition(ServiceSubtask ServiceSubtask) {
+    public ServiceTaskVO queryTaskByCondition(ServiceSubtask serviceSubtask) {
         //瀹氫箟鎮h�呬笌鍗曚竴浠诲姟鍏宠仈琛ㄩ泦鍚�
         List<PatTaskRelevance> patTaskRelevances = new ArrayList<>();
-        List<ServiceSubtask> list = selectServiceSubtaskList(ServiceSubtask);
+        ServiceSubtaskVO serviceSubtaskVO = DtoConversionUtils.sourceToTarget(serviceSubtask, ServiceSubtaskVO.class);
+        List<ServiceSubtask> list = selectServiceSubtaskList(serviceSubtaskVO);
+
+        ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
         if (CollectionUtils.isEmpty(list) || list.size() == 0) {
-            return new ServiceTaskVO();
+            return DtoConversionUtils.sourceToTarget(serviceTask, ServiceTaskVO.class);
         }
-        ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(ServiceSubtask.getTaskid());
+
+
         //灏嗘煡鍑烘潵鐨勬暟鎹�掑叆ServiceSubtaskVO涓�
         ServiceTaskVO serviceTaskVO = DtoConversionUtils.sourceToTarget(serviceTask, ServiceTaskVO.class);
         serviceTaskVO.setShowDate(serviceTask.getShowDate());
@@ -138,12 +145,23 @@
                 //鑾峰彇鍒版偅鑰呬俊鎭紝骞舵斁鍏ュ埌闆嗗悎涓�
                 patTaskRelevance.setName(serviceSubtask1.getSendname());
                 patTaskRelevance.setAge(serviceSubtask1.getAge());
+                patTaskRelevance.setFinishtime(serviceSubtask1.getFinishtime());
                 patTaskRelevance.setSfzh(serviceSubtask1.getSfzh());
                 patTaskRelevance.setPhone(serviceSubtask1.getPhone());
                 patTaskRelevance.setAddr(serviceSubtask1.getAddr());
                 patTaskRelevance.setDiagname(serviceSubtask1.getDiagname());
                 patTaskRelevance.setPatid(serviceSubtask1.getPatid());
                 patTaskRelevance.setSendStatus(serviceSubtask1.getSendstate());
+                patTaskRelevance.setDeptCode(serviceSubtask1.getDeptcode());
+                patTaskRelevance.setDeptName(serviceSubtask1.getDeptname());
+                patTaskRelevance.setLeavehospitaldistrictcode(serviceSubtask1.getLeavehospitaldistrictcode());
+                patTaskRelevance.setLeavehospitaldistrictname(serviceSubtask1.getLeavehospitaldistrictname());
+                patTaskRelevance.setInhosptime(serviceSubtask1.getInhosptime());
+                patTaskRelevance.setDrname(serviceSubtask1.getDrname());
+                patTaskRelevance.setDrcode(serviceSubtask1.getDrcode());
+                patTaskRelevance.setEndtime(serviceSubtask1.getEndtime());
+                patTaskRelevance.setNurseId(serviceSubtask1.getNurseId());
+                patTaskRelevance.setNurseName(serviceSubtask1.getNurseName());
                 patTaskRelevances.add(patTaskRelevance);
             }
             if (serviceSubtask1.getHospType().equals("2")) {
@@ -152,12 +170,24 @@
                 patTaskRelevance.setAge(serviceSubtask1.getAge());
                 patTaskRelevance.setSfzh(serviceSubtask1.getSfzh());
                 patTaskRelevance.setPhone(serviceSubtask1.getPhone());
+                patTaskRelevance.setFinishtime(serviceSubtask1.getFinishtime());
                 patTaskRelevance.setAddr(serviceSubtask1.getAddr());
                 patTaskRelevance.setDeptName(serviceSubtask1.getDeptname());
+                patTaskRelevance.setDeptCode(serviceSubtask1.getDeptcode());
                 patTaskRelevance.setBedNo(serviceSubtask1.getBedNo());
                 patTaskRelevance.setDiagname(serviceSubtask1.getDiagname());
                 patTaskRelevance.setPatid(serviceSubtask1.getPatid());
                 patTaskRelevance.setSendStatus(serviceSubtask1.getSendstate());
+                patTaskRelevance.setLeavehospitaldistrictcode(serviceSubtask1.getLeavehospitaldistrictcode());
+                patTaskRelevance.setLeavehospitaldistrictname(serviceSubtask1.getLeavehospitaldistrictname());
+                patTaskRelevance.setInhosptime(serviceSubtask1.getInhosptime());
+                patTaskRelevance.setStarttime(serviceSubtask1.getStarttime());
+                patTaskRelevance.setDrname(serviceSubtask1.getDrname());
+                patTaskRelevance.setDrcode(serviceSubtask1.getDrcode());
+                patTaskRelevance.setEndtime(serviceSubtask1.getEndtime());
+                patTaskRelevance.setStarttime(serviceSubtask1.getStarttime());
+                patTaskRelevance.setNurseId(serviceSubtask1.getNurseId());
+                patTaskRelevance.setNurseName(serviceSubtask1.getNurseName());
                 patTaskRelevances.add(patTaskRelevance);
             }
         }
@@ -167,10 +197,41 @@
     }
 
     @Override
-    public List<ServiceSubtask> patItem(ServiceSubtask serviceSubtask) {
+    public List<ServiceSubtask> patItem(ServiceSubtaskVO serviceSubtaskVO) {
+        List<ServiceSubtask> selectServiceSubtaskList = this.selectServiceSubtaskList(serviceSubtaskVO);
+        //鏍规嵁鍑洪櫌 鏃堕棿鍊掑簭
+        List<ServiceSubtask> sortedServiceSubtaskList = selectServiceSubtaskList.stream().sorted(Comparator.comparing(ServiceSubtask::getEndtime).reversed()).collect(Collectors.toList());
+        return sortedServiceSubtaskList;
+    }
 
+    @Override
+    public Map<String, Object> patItemCount(ServiceSubtaskVO serviceSubtaskVO) {
+        serviceSubtaskVO.setPageSize(99999999);
+        serviceSubtaskVO.setPageNum(1);
+        List<ServiceSubtask> selectServiceSubtaskList = this.selectServiceSubtaskList(serviceSubtaskVO);
+        Map<String, Object> map = new HashMap<>();
+        Integer wzx = 0;
+        Integer ysf = 0;
+        Integer yc = 0;
+        Integer fssb = 0;
+        Integer yfs = 0;
+        Integer blq = 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.getExcep().equals("1")) yc = yc + 1;
+        }
+        map.put("wzx", wzx);
+        map.put("ysf", ysf);
+        map.put("yc", yc);
+        map.put("fssb", fssb);
+        map.put("yfs", yfs);
+        map.put("blq", blq);
 
-        return this.selectServiceSubtaskList(serviceSubtask);
+        return map;
     }
 
     /**
@@ -218,22 +279,36 @@
      */
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public int insertOrUpdateTask(ServiceTaskVO serviceTaskVO) {
+    public Map<String, Integer> insertOrUpdateTask(ServiceTaskVO serviceTaskVO) {
         if (ObjectUtils.isEmpty(serviceTaskVO)) {
             log.info("浠诲姟鍏ュ弬涓虹┖锛岃妫�鏌ュ叆鍙�");
             throw new BaseException("浠诲姟鍏ュ弬涓虹┖锛岃妫�鏌ュ叆鍙�");
         }
-        Integer integer = 1;
+        Integer integer = null;
         ServiceTask serviceTask = DtoConversionUtils.sourceToTarget(serviceTaskVO, ServiceTask.class);
         serviceTask.setTextParam(JSON.toJSONString(serviceTaskVO.getTextParam()));
         if (serviceTaskVO.getIsoperation() != null && serviceTaskVO.getIsoperation() == 1) {
             //寰�浠诲姟琛ㄤ腑锛屾柊澧炰换鍔�
             if (ObjectUtils.isNotEmpty(serviceTaskVO.getSendTimeslot()))
                 serviceTask.setSendTimeSlot(JSON.toJSONString(serviceTaskVO.getSendTimeslot()));
-            if (serviceTask.getSendState() == null) serviceTask.setSendState(1);
-            serviceTask.setLibtemplateid(serviceTaskVO.getLibtemplateid().toString());
+            if (serviceTask.getSendState() == null) {
+                serviceTask.setSendState(1L);
+                serviceTaskVO.setSendState(1L);
+            }
+            if (StringUtils.isNotEmpty(serviceTaskVO.getLibtemplateid())) {
+                serviceTask.setLibtemplateid(serviceTaskVO.getLibtemplateid());
+            }
             serviceTask.setTemplateid(serviceTaskVO.getTemplateid());
+
+            serviceTask.setLeaveldeptcodes(serviceTaskVO.getLeaveldeptcodes());
+            serviceTask.setLeavehospitaldistrictcode(serviceTask.getLeavehospitaldistrictcode());
             serviceTaskService.insertServiceTask(serviceTask);
+            if (serviceTaskVO.getLongTask() != null && serviceTaskVO.getLongTask() == 1) {
+                Map<String, Integer> map = new HashMap<>();
+                map.put("subTaskId", null);
+                map.put("taskId", serviceTask.getTaskid().intValue());
+                return map;
+            }
 
             //灏嗕换鍔′俊鎭斁鍒版湇鍔¤〃涓�
             ServiceSubtask serviceSubtask = DtoConversionUtils.sourceToTarget(serviceTaskVO, ServiceSubtask.class);
@@ -245,10 +320,25 @@
                     //灏嗕换鍔′俊鎭柊澧炲埌闅忚鏈嶅姟琛ㄤ腑
                     serviceSubtask.setSendname(patTaskRelevance.getName());
                     serviceSubtask.setAge(patTaskRelevance.getAge());
-                    serviceSubtask.setSfzh(patTaskRelevance.getSfzh());
+                    serviceSubtask.setSfzh(patTaskRelevance.getIdcardno());
+                    serviceSubtask.setPhone(patTaskRelevance.getPhone());
+                    serviceSubtask.setAddr(patTaskRelevance.getAddr());
+                    serviceSubtask.setPatid(patTaskRelevance.getPatid());
+                    serviceSubtask.setCreateTime(DateUtils.getNowDate());
+                    serviceSubtask.setSendstate(1L);
+                    serviceSubtask.setDeptcode(patTaskRelevance.getDeptCode());
+                    serviceSubtask.setDeptname(patTaskRelevance.getDeptName());
+                    serviceSubtask.setLeavehospitaldistrictcode(patTaskRelevance.getLeavehospitaldistrictcode());
+                    serviceSubtask.setLeavehospitaldistrictname(patTaskRelevance.getLeavehospitaldistrictname());
                     serviceSubtask.setType(serviceTaskVO.getHospType());
                     serviceSubtask.setHospType(patTaskRelevance.getHospType());
                     serviceSubtask.setOpenid(patTaskRelevance.getOpenid());
+                    serviceSubtask.setDrname(patTaskRelevance.getDrname());
+                    serviceSubtask.setDrcode(patTaskRelevance.getDrcode());
+                    serviceSubtask.setInhosptime(patTaskRelevance.getInhosptime());
+                    serviceSubtask.setEndtime(patTaskRelevance.getEndtime());
+                    serviceSubtask.setNurseId(patTaskRelevance.getNurseId());
+                    serviceSubtask.setNurseName(patTaskRelevance.getNurseName());
                     serviceSubtaskMapper.insertServiceSubtask(serviceSubtask);
                     integer = serviceSubtask.getId().intValue();
                 }
@@ -260,19 +350,35 @@
                 serviceTask.setSendTimeSlot(JSON.toJSONString(serviceTaskVO.getSendTimeslot()));
             //淇敼鎿嶄綔锛岄渶瑕佸皢stopState鐘舵��+1
             ServiceTask serviceTask1 = serviceTaskService.selectServiceTaskByTaskid(serviceTask.getTaskid());
-            serviceTask.setStopState(serviceTask1.getStopState() + 1);
-            serviceTask.setTemplateid(serviceTaskVO.getLibtemplateid());
+            long l = serviceTask1.getStopState() + 1;
+            serviceTask.setStopState(l);
+            if (serviceTaskVO.getLibtemplateid() != null)
+                serviceTask.setLibtemplateid(serviceTaskVO.getLibtemplateid().toString());
+            serviceTask.setTemplateid(serviceTaskVO.getTemplateid());
             serviceTaskService.updateServiceTask(serviceTask);
             if (CollectionUtils.isNotEmpty(serviceTaskVO.getPatTaskRelevances())) {
                 for (PatTaskRelevance patTaskRelevance : serviceTaskVO.getPatTaskRelevances()) {
                     ServiceSubtask serviceSubtask = DtoConversionUtils.sourceToTarget(serviceTaskVO, ServiceSubtask.class);
                     serviceSubtask.setSendname(patTaskRelevance.getName());
+                    serviceSubtask.setAge(patTaskRelevance.getAge());
+                    serviceSubtask.setSfzh(patTaskRelevance.getSfzh());
+                    serviceSubtask.setPhone(patTaskRelevance.getPhone());
                     serviceSubtask.setAddr(patTaskRelevance.getAddr());
                     serviceSubtask.setPatid(patTaskRelevance.getPatid());
                     serviceSubtask.setOpenid(patTaskRelevance.getOpenid());
+                    serviceSubtask.setDeptcode(patTaskRelevance.getDeptCode());
+                    serviceSubtask.setLeavehospitaldistrictname(patTaskRelevance.getLeavehospitaldistrictname());
+                    serviceSubtask.setLeavehospitaldistrictcode(patTaskRelevance.getLeavehospitaldistrictcode());
+                    serviceSubtask.setDeptname(patTaskRelevance.getDeptName());
                     serviceSubtask.setType(serviceTaskVO.getHospType());
                     serviceSubtask.setCreateTime(DateUtils.getNowDate());
+                    serviceSubtask.setDrname(patTaskRelevance.getDrname());
+                    serviceSubtask.setDrcode(patTaskRelevance.getDrcode());
+                    serviceSubtask.setInhosptime(patTaskRelevance.getInhosptime());
                     serviceSubtask.setHospType(patTaskRelevance.getHospType());
+                    serviceSubtask.setEndtime(patTaskRelevance.getEndtime());
+                    serviceSubtask.setNurseId(patTaskRelevance.getNurseId());
+                    serviceSubtask.setNurseName(patTaskRelevance.getNurseName());
                     serviceSubtask.setTextParam(new Gson().toJson(serviceTaskVO.getTextParam()));
                     if (patTaskRelevance.getIsoperation() != null) {
                         if (patTaskRelevance.getIsoperation() == 2)
@@ -289,7 +395,10 @@
                 }
             }
         }
-        return integer;
+        Map<String, Integer> map = new HashMap<>();
+        map.put("subTaskId", integer);
+        map.put("taskId", serviceTask.getTaskid().intValue());
+        return map;
     }
 
 
@@ -337,10 +446,15 @@
             if (noVoice == ivrTaskTemplateVO.getNoVoiceNum().intValue()) {
                 //宸茬粡闂簡瀵瑰簲鐨勯亶鏁帮紝灏卞垽鏂槸鍚﹁繕鏈変笅涓�棰�
                 if (nowQuestion.getTargetid() == IvrTaskTemplateScriptVOs.size()) {
+                    //娌℃湁涓嬩竴棰樹簡锛屽氨鎸傛柇鐢佃瘽锛屾挱鏀剧粨鏉熻
+                    redisCache.setCacheObject(phoneCallBackVO.getUuid() + "hangup", 1, 120, TimeUnit.MINUTES);
                     phoneUtils.ttsPlayback(ivrTaskTemplateVO.getRevisitAfter(), phoneCallBackVO.getUuid());
                     return;
                 } else {
                     //鏈変笅涓�棰�
+                    redisCache.setCacheObject(phoneCallBackVO.getUuid() + "noVoice", 0, 120, TimeUnit.MINUTES);
+                    IvrTaskTemplateScriptVO nextQuestion = getNextQuestion(IvrTaskTemplateScriptVOs, nowQuestion);
+                    // 闂锛�  鍘昏皟鐢ㄢ�渢ts鍚堟垚鍜屾挱鏀锯�濇帴鍙�
                     String date = simpleDateFormat1.format(new Date());
                     log.info("鍘昏皟鐢╰ts鍚堟垚鍜屾挱鏀炬帴鍙�: {},uuid涓猴細{}", date, phoneCallBackVO.getUuid());
                     phoneUtils.ttsPlayback(nowQuestion.getScriptContent(), phoneCallBackVO.getUuid());
@@ -373,6 +487,60 @@
                     Pattern pattern2 = Pattern.compile(nowQuestion.getIvrTaskScriptTargetoptionList().get(j).getTargetregex2());
                     matcher2 = pattern2.matcher(phoneCallBackVO.getTextResult());
                 }
+                log.error("PCB--getQuestionText闂涓猴細{},UUID锛歿}", nowQuestion.getScriptContent(), 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鏄崟閫夐鐨勬敼娉�
+                    nowQuestion.getIvrTaskScriptTargetoptionList().get(j).setIsUserOperation(1);
+                    serviceTaskScriptTargetoptionMapper.updateIvrTaskTemplateTargetoption(nowQuestion.getIvrTaskScriptTargetoptionList().get(j));
+
+                    //灏嗛潤榛樼疆涓�0
+                    redisCache.setCacheObject(phoneCallBackVO.getUuid() + "noVoice", 0, 120, TimeUnit.MINUTES);
+                    redisCache.setCacheObject(phoneCallBackVO.getUuid() + "mateNum", 0, 120, TimeUnit.MINUTES);
+
+                    //灏嗘偅鑰呯殑鍥炵鍐欒繘琛ㄩ噷
+                    IvrTaskVisitResult serviceTaskVisitResult = DtoConversionUtils.sourceToTarget(serviceSubtask, IvrTaskVisitResult.class);
+                    serviceTaskVisitResult.setId(null);
+                    serviceTaskVisitResult.setQuestion(nowQuestion.getScriptContent());
+                    serviceTaskVisitResult.setPatientAnswer(phoneCallBackVO.getTextResult());
+                    serviceTaskVisitResult.setCreateTime(new Date());
+                    serviceTaskVisitResult.setOptionResult(nowQuestion.getIvrTaskScriptTargetoptionList().get(j).getTargetvalue());
+                    serviceTaskVisitResultMapper.insertIvrTaskVisitResult(serviceTaskVisitResult);
+
+                    //灏嗗尮閰嶅埌鐨勬爣璇嗘敼鎴恡rue
+                    isppd = true;
+
+                    //鑾峰彇涓嬩竴棰�
+                    Long nextQuestion = nowQuestion.getIvrTaskScriptTargetoptionList().get(j).getNextQuestion();
+                    for (IvrTaskTemplateScriptVO script : IvrTaskTemplateScriptVOs) {
+                        if (script.getTargetid() == nextQuestion) {
+                            QuestionMessage questionMessage = new QuestionMessage();
+                            questionMessage.setNowQuestion(script);
+                            questionMessage.setQuestionList(IvrTaskTemplateScriptVOs);
+                            redisCache.setCacheObject(phoneCallBackVO.getUuid() + "returnQues", questionMessage, 120, TimeUnit.MINUTES);
+                            phoneUtils.ttsPlayback(script.getScriptContent(), phoneCallBackVO.getUuid());
+                            return;
+                        } else if (nextQuestion > IvrTaskTemplateScriptVOs.size()) {
+                            //娌℃湁涓嬩竴棰樹簡锛屽氨缁撴潫浜�
+                            String date = simpleDateFormat1.format(new Date());
+                            log.error("娌℃湁涓嬩竴棰樹簡锛屽氨缁撴潫浜�: {},uuid涓猴細{}", date, phoneCallBackVO.getUuid());
+                            redisCache.setCacheObject(phoneCallBackVO.getUuid() + "hangup", 1, 120, TimeUnit.MINUTES);
+                            phoneUtils.ttsPlayback(ivrTaskTemplateVO.getRevisitAfter(), phoneCallBackVO.getUuid());
+                            try {
+                                Thread.sleep(3000);
+                            } catch (InterruptedException e) {
+                                e.printStackTrace();
+                            }
+                            phoneUtils.hangup("", "", ivrTaskTemplateVO.getRevisitAfter(), "", "", "", "", phoneCallBackVO.getUuid());
+                            return;
+                        }
+                    }
+                    return;
+                } else {
+                    //娌℃湁鍖归厤涓婂綋鍓峯ption
+                    //Targetregex2 涓篺alse锛岃〃绀哄湪Targetregex2涓瓨鍦�  璇彞涓殑鍏抽敭瀛楋紝杩欎釜option灏变笉鐢ㄥ啀缁х画鍖归厤浜嗭紝鐩存帴鍖归厤涓嬩竴涓猳ption
+                    continue;
+                }
             }
 
             if (isppd != true) {
@@ -387,6 +555,8 @@
                         IvrTaskTemplateScriptVO nextQuestion = getNextQuestion(IvrTaskTemplateScriptVOs, nowQuestion);
                         questionMessage.setQuestionList(IvrTaskTemplateScriptVOs);
                         questionMessage.setNowQuestion(nextQuestion);
+                        redisCache.setCacheObject(phoneCallBackVO.getUuid() + "returnQues", questionMessage, 120, TimeUnit.MINUTES);
+                        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());
@@ -395,6 +565,7 @@
                         //灏卞彲浠ユ寕鏂數璇濅簡
                         String date = simpleDateFormat1.format(new Date());
                         log.info("灏卞彲浠ユ寕鏂數璇濅簡------: {},uuid涓猴細{}", date, phoneCallBackVO.getUuid());
+                        redisCache.setCacheObject(phoneCallBackVO.getUuid() + "hangup", 1, 120, TimeUnit.MINUTES);
                         phoneUtils.ttsPlayback(ivrTaskTemplateVO.getRevisitAfter(), phoneCallBackVO.getUuid());
                         try {
                             Thread.sleep(3000);
@@ -421,16 +592,38 @@
                 }
                 List<IvrLibaExtemplatescript> ivrLibaExtemplatescripts = ivrLibaExtemplatescriptMapper.queryIvrLibaExtemplatescriptList(list1);
                 for (IvrLibaExtemplatescript ivrLibaExtemplatescript : ivrLibaExtemplatescripts) {
+                    Matcher matcher = null;
                     if (StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex())) {
                         Pattern pattern = Pattern.compile(ivrLibaExtemplatescript.getSelfRegex());
-                        pattern.matcher(returnQues.getContent());
+                        matcher = pattern.matcher(returnQues.getContent());
                     }
 
+                    Matcher matcher2 = null;
                     if (StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex2())) {
                         Pattern pattern2 = Pattern.compile(ivrLibaExtemplatescript.getSelfRegex2());
-                        pattern2.matcher(returnQues.getContent());
+                        matcher2 = pattern2.matcher(returnQues.getContent());
                     }
                     log.info("++++++++++++++++++++++++++閫氱敤搴撴槸鍚︿负绌猴細selfRegex : {} , selfRegex2 : {}", ivrLibaExtemplatescript.getSelfRegex(), ivrLibaExtemplatescript.getSelfRegex2());
+                    if (StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex()) && matcher.matches() && StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex2()) && matcher2.matches() || StringUtils.isEmpty(ivrLibaExtemplatescript.getSelfRegex()) && StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex2()) && matcher2.matches() || StringUtils.isEmpty(ivrLibaExtemplatescript.getSelfRegex2()) && StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex()) && matcher.matches()) {
+                        QuestionMessage questionMessage = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "returnQues");
+                        IvrTaskTemplateScriptVO ivrTaskTemplateScriptVO = returnQues.getNowQuestion();
+                        ivrTaskTemplateScriptVO.setSubmoduleText(ivrLibaExtemplatescript.getSwitchText());
+                        ivrTaskTemplateScriptVO.setSubmoduleVoice(ivrLibaExtemplatescript.getSwitchWav());
+                        redisCache.setCacheObject(phoneCallBackVO.getUuid() + "returnQues", questionMessage, 120, TimeUnit.MINUTES);
+                        if (ivrLibaExtemplatescript.getIsEnd() == 1) {
+                            //灏嗛棶棰樼疆绌�
+                            IvrTaskTemplateScriptVO nowQuestion1 = questionMessage.getNowQuestion();
+                            nowQuestion1.setScriptContent(null);
+                            nowQuestion1.setScriptVoice(null);
+                            questionMessage.setNowQuestion(nowQuestion1);
+                            redisCache.setCacheObject(phoneCallBackVO.getUuid() + "returnQues", questionMessage, 120, TimeUnit.MINUTES);
+                            redisCache.setCacheObject(phoneCallBackVO.getUuid() + "isOver", 1, 120, TimeUnit.MINUTES);
+                        }
+                        //璋冪敤鈥�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());
+                    }
                     break;
                 }
                 String date = simpleDateFormat1.format(new Date());
@@ -447,6 +640,9 @@
      */
     @Override
     public PhoneCallBackYQVO phoneCallBackYQ(PhoneCallReqYQVO phoneCallReqYQVO) {
+        //瀹氫箟涓�涓垎鏁扮殑鍙橀噺
+        Boolean aBoolean1 = redisCache.hasKey(phoneCallReqYQVO.getUuid() + "SCORE");
+        if (!aBoolean1) redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "SCORE", 0);
         PhoneCallBackYQVO phoneCallBackYQVO = new PhoneCallBackYQVO();
         //channel_create 閫氶亾鍒涘缓鐨勬椂鍊欙紝鍙互鎵ц涓�浜涘叾瀹冩搷浣滐紝璀鍙戜釜鐭俊涔嬬被鐨�;  鎴戜滑鐨勪笟鍔″彲浠ヤ笉鐢ㄧ    PlayEventCallback 杩欎釜鏄挱鏀捐闊崇殑,鏆傛椂鐢ㄤ笉鍒�     End_time()= -1鎴杗ull琛ㄧず褰撳墠鐨刟srtext涓嶆槸涓�鍙ュ畬鏁寸殑璇�
         if (phoneCallReqYQVO.getOperate().equals("channel_create") || phoneCallReqYQVO.getOperate().equals("PlayEventCallback") || phoneCallReqYQVO.getEnd_time() == null || phoneCallReqYQVO.getEnd_time() == -1) {
@@ -469,6 +665,8 @@
         if (!aBoolean) {
             //缁欓潤榛樿缃竴涓粯璁ゆ鏁板湪redis涓�
             redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "noVoice", 0, 120, TimeUnit.MINUTES);
+            //濡傛灉涓嶅瓨鍦紝灏辨妸褰撳墠鐨刄UID鍋氫负key锛屾斁鍒板璞′腑鍘�
+            redisCache.setCacheObject(phoneCallReqYQVO.getUuid(), phoneCallReqYQVO, 120, TimeUnit.MINUTES);
         }
 
         if ("SilentCallback".equals(phoneCallReqYQVO.getOperate())) {
@@ -496,7 +694,17 @@
                 serviceSubtaskDetailList.add(getServiceSubtaskDetail(phoneCallReqYQVO, ivrTaskTemplateScriptVO, serviceSubtask, ivrTaskTemplate));
                 serviceSubTaskDetailReq.setServiceSubtaskDetailList(serviceSubtaskDetailList);
                 saveQuestionAnswerPhone(serviceSubTaskDetailReq);
+                //鍘籸edis涓紝鎶婅瀛愪换鍔D鍒犻櫎
+                Long id = serviceSubtask.getId();
+                //鍏堟洿鏂颁竴涓嬪垎鏁�
+                double score = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
+                serviceSubtask.setScore(BigDecimal.valueOf(score));
+                serviceSubtask.setFinishtime(new Date());
+                serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
+                Map<String, String> map = delRedisValue(null, id.toString());
+                redisCache.setCacheObject(map.get("cacheName"), map.get("val"));
                 redisCache.deleteObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone());
+                redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "SCORE");
             }
             return phoneCallBackYQVO;
         } else if ("AsrCallback".equals(phoneCallReqYQVO.getOperate())) {
@@ -540,10 +748,17 @@
                             Long nextQuestion = null;
                             if (ivrTaskTemplateScriptVO.getBranchFlag().equals("1")) {
                                 nextQuestion = ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getNextQuestion();
+                                //鏇存柊鍒嗘暟
+                                double score = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
+                                score = BigDecimal.valueOf(score).add(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getScore()).doubleValue();
+                                redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "SCORE", score);
                             } else {
                                 nextQuestion = ivrTaskTemplateScriptVO.getNextScriptno();
+                                //鏇存柊鍒嗘暟
+                                double score = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
+                                score = BigDecimal.valueOf(score).add(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getScore()).doubleValue();
+                                redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "SCORE", score);
                             }
-
 
                             for (IvrTaskTemplateScript script : ivrTaskTemplateScripts) {
                                 if (script.getSort() == nextQuestion.intValue()) {
@@ -561,6 +776,11 @@
                             if (ivrTaskTemplateScriptVO.getNextScriptno() == 0 || ivrTaskTemplateScriptVO.getNextScriptno() == null) {
                                 phoneCallBackYQVO.setType("hangup");
                                 phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue());
+                                //鏇存柊涓�涓嬪垎鏁�
+                                double score = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
+                                serviceSubtask.setScore(BigDecimal.valueOf(score));
+                                serviceSubtask.setFinishtime(new Date());
+                                serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
                                 //璁剧疆缁撴潫璇�
                                 phoneCallBackYQVO.setValue(ivrTaskTemplate.getRevisitAfter());
                                 Long id = serviceSubtask.getId();
@@ -568,6 +788,7 @@
                                 redisCache.setCacheObject(map.get("cacheName"), map.get("val"));
                                 redisCache.deleteObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone());
                                 redisCache.deleteObject(phoneCallReqYQVO.getTaskid().trim() + "&&" + "mate" + "&&" + phoneCallReqYQVO.getUuid());
+                                redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "SCORE");
 //                                return phoneCallBackYQVO;
                             }
                         }
@@ -587,11 +808,19 @@
                             if (StringUtils.isNotEmpty(phoneCallBackYQVO.getValue()))
                                 phoneCallBackYQVO.setValue(phoneCallBackYQVO.getValue() + ivrTaskTemplate.getRevisitAfter());
                             else phoneCallBackYQVO.setValue(ivrTaskTemplate.getRevisitAfter());
+
+                            //鏇存柊涓�涓嬪垎鏁�
+                            double score = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
+                            serviceSubtask.setScore(BigDecimal.valueOf(score));
+                            serviceSubtask.setFinishtime(new Date());
+                            serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
+
                             //鍘籸edis涓紝鎶婅瀛愪换鍔D鍒犻櫎
                             Long id = serviceSubtask.getId();
                             Map<String, String> map = delRedisValue(null, id.toString());
                             redisCache.setCacheObject(map.get("cacheName"), map.get("val"));
                             redisCache.deleteObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone());
+                            redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "SCORE");
 //                            return phoneCallBackYQVO;
                         } else {
                             //鏍规嵁ivrTaskTemplateScriptVO.getNextScriptno()鑾峰彇涓嬩竴棰樿繘琛屾彁闂�
@@ -603,6 +832,12 @@
                                     phoneCallBackYQVO.setValue(getObject(serviceSubtask, scriptContent));
                                     //灏嗚鎮h�呯殑Redis涓殑棰樼洰ID锛岃繘琛屼慨鏀�
                                     redisCache.setCacheObject(phoneCallReqYQVO.getTaskid().trim() + "-" + phoneCallReqYQVO.getPhone().trim(), script.getId().toString(), 120, TimeUnit.MINUTES);
+
+                                    //鏇存柊涓�涓嬪垎鏁�
+                                    double score = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
+                                    score = BigDecimal.valueOf(score).add(script.getScore()).doubleValue();
+
+                                    redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "SCORE", score);
                                 }
                             }
                         }
@@ -624,6 +859,7 @@
                 serviceSubtaskDetailList.add(getServiceSubtaskDetail(phoneCallReqYQVO, ivrTaskTemplateScriptVO, serviceSubtask, ivrTaskTemplate));
                 serviceSubTaskDetailReq.setServiceSubtaskDetailList(serviceSubtaskDetailList);
                 saveQuestionAnswerPhone(serviceSubTaskDetailReq);
+//                String xh = idSort.split("-")[1];
 
                 //濡傛灉閫夐」鍒嗘敮涓�1鐨勮瘽锛屽垯闇�瑕佹牴鎹棶棰樹笂鐨刵extScriptno杩涜璺宠浆
                 //闂瓟棰樻病鏈夎烦杞�
@@ -635,6 +871,14 @@
                             String scriptContent = ivrTaskTemplateScript1.getScriptContent();
                             phoneCallBackYQVO.setValue(getObject(serviceSubtask, scriptContent));
                             redisCache.deleteObject(phoneCallReqYQVO.getTaskid().trim() + "&&" + "mate" + "&&" + phoneCallReqYQVO.getUuid());
+                            redisCache.setCacheObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone(), ivrTaskTemplateScript1.getId().toString());
+
+                            //鏇存柊涓�涓嬪垎鏁�
+                            double score = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
+                            score = BigDecimal.valueOf(score).add(ivrTaskTemplateScriptVO.getScore()).doubleValue();
+                            redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "SCORE", score);
+
+//                            return phoneCallBackYQVO;
                         }
                     }
                 } else if (ivrTaskTemplateScriptVO.getNextScriptno() == null) {
@@ -642,10 +886,19 @@
                     phoneCallBackYQVO.setType("hangup");
                     phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue());
                     phoneCallBackYQVO.setValue(ivrTaskTemplate.getRevisitAfter());
+
+                    //鏇存柊涓�涓嬪垎鏁�
+                    double score = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
+                    serviceSubtask.setScore(BigDecimal.valueOf(score));
+                    serviceSubtask.setFinishtime(new Date());
+                    serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
+
                     //鍘籸edis涓紝鎶婅瀛愪换鍔D鍒犻櫎
                     Long id = serviceSubtask.getId();
+                    Map<String, String> map = delRedisValue(null, id.toString());
+                    redisCache.setCacheObject(map.get("cacheName"), map.get("val"));
                     redisCache.deleteObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone());
-                    log.error("鐢佃瘽鎸傛柇4");
+                    redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "SCORE");
                 }
 
                 //閫夐」鍖归厤瀹屾垚鍚庯紝闇�瑕佸啀鍘婚�氳繃搴撳啀杩涜鍖归厤涓�娆�
@@ -677,9 +930,7 @@
                         break;
                     }
                 }
-
             }
-
         }
         return phoneCallBackYQVO;
     }
@@ -763,9 +1014,9 @@
         if (!StringUtils.isEmpty(value0)) {
             pullTaskVOList = getPullTaskList(value0, "cache-0");
             //灏哻ache-0鐨勬暟鎹紝杞Щ涓嶅鍔瞔ache-00涓�
-            String cache00 = redisCache.getCacheObject("cache-0");
-            if (!StringUtils.isEmpty(cache00)) redisCache.setCacheObject("cache-0", cache00 + "," + value0);
-            else redisCache.setCacheObject("cache-0", value0);
+            String cache00 = redisCache.getCacheObject("cache-00");
+            if (!StringUtils.isEmpty(cache00)) redisCache.setCacheObject("cache-00", cache00 + "," + value0);
+            else redisCache.setCacheObject("cache-00", value0);
             redisCache.deleteObject("cache-0");
         } else {
             for (int i = 1; i < 6; i++) {
@@ -776,6 +1027,10 @@
                 if (CollectionUtils.isNotEmpty(pullTaskVOList2) && pullTaskVOList2.size() > 0) {
                     pullTaskVOList.addAll(pullTaskVOList2);
                 }
+                //灏哻ache-i鐨勬暟鎹紝杞Щ涓嶅鍔瞔ache-0i涓�
+                String cache0i = redisCache.getCacheObject("cache-0" + i);
+                if (!StringUtils.isEmpty(cache0i)) redisCache.setCacheObject("cache-0" + i, cache0i + "," + value);
+                else redisCache.setCacheObject("cache-0" + i, value);
                 redisCache.deleteObject("cache-" + i);
             }
         }
@@ -839,6 +1094,242 @@
         return pullTaskVOList;
     }
 
+
+    //涓嬮潰鐨勪唬鐮佷笉鑳藉垹闄わ紝涓婇潰鐨勬柟娉曞彧鏄厤鍚堢數璇濈鑱旇皟鐢ㄧ殑锛�
+//    @Override
+//    public PhoneCallBackVO phoneCallBack(PhoneCallBackVO phoneCallBackVO) {
+//        log.error("phoneCallBackVO鐨勫叆鍙傦細{},{},{},{},{},{},{}", phoneCallBackVO.getResultType(), phoneCallBackVO.getUuid(), phoneCallBackVO.getErrResult(), phoneCallBackVO.getTextResult(), phoneCallBackVO.getHangUpResult(), phoneCallBackVO.getEnumState(), phoneCallBackVO.getUint8());
+//        //鑾峰彇鏁版嵁
+//        Boolean aBoolean = redisCache.hasKey(phoneCallBackVO.getUuid());
+//        if (!aBoolean) {
+//            throw new BaseException("璇uid涓嶅瓨鍦�");
+//        }
+//        Integer hangupValue = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "hangup");
+//        if (hangupValue != null && hangupValue == 1) {
+//            //hangupValue == 1  闅忚缁撴潫锛岀洿鎺ュ彲浠ユ寕鐢佃瘽
+//            PhoneUtils phoneUtils = new PhoneUtils();
+//            phoneUtils.hangup(phoneCallBackVO.getUuid(), null, null, null, null, null, null, null);
+//
+//        }
+//
+//        Map<String, Object> map = redisCache.getCacheObject(phoneCallBackVO.getUuid());
+////        ObjectMapper objectMapper = new ObjectMapper();
+////        Map<String, Object> map = null;
+////        try {
+////            map = objectMapper.readValue(cacheObject, Map.class);
+////        } catch (JsonProcessingException e) {
+////            e.printStackTrace();
+////        }
+//
+//        ServiceSubtask ServiceSubtask = (ServiceSubtask) map.get("ServiceSubtask");
+//        List<IvrLibaTemplateScriptVO> ivrLibaTemplateScriptVOs = (List<IvrLibaTemplateScriptVO>) map.get("ivrLibaTemplateScriptVO");
+//        //灏唘uid鏇存柊鍒版暟鎹簱涓�
+//        ServiceSubtask.setSenduuid(phoneCallBackVO.getUuid());
+//        ServiceSubtaskMapper.updateServiceSubtask(ServiceSubtask);
+//
+//        //鑾峰彇妯℃澘淇℃伅
+//        IvrLibaTemplateVO ivrLibaTemplateVO = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "ivrLibaTemplateVO");
+//
+//
+//        //棣栧厛鍒ゆ柇resultType
+//        if (phoneCallBackVO.getResultType() == 1) {
+//            //鍛煎彨缁撴灉鎺ュ彛: 1
+//            if (phoneCallBackVO.getUint8() == 1) {
+//                //鍛煎彨澶辫触锛屽幓redis涓褰曚竴涓嬪け璐ユ鏁帮紝杩涜鍐嶆鍛煎彨
+//                Integer integer = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "uint8");
+//                if (integer != null) {
+//                    redisCache.setCacheObject(phoneCallBackVO.getUuid() + "uint8", integer + 1, 120, TimeUnit.MINUTES);
+//                } else {
+//                    redisCache.setCacheObject(phoneCallBackVO.getUuid() + "uint8", 1, 120, TimeUnit.MINUTES);
+//                }
+//
+//                if (integer != null && integer == ServiceSubtask.getRecallcount().intValue()) {
+//                    log.info("鏃犱汉鎺ュ惉锛歿},   {}", phoneCallBackVO.getErrResult(), phoneCallBackVO.getUuid());
+//                    //杩炵画鎵撹瀹氭锛屽鏋滆娌′汉鎺ワ紝閭e氨缁撴潫
+//                    ServiceSubtask.setResult(phoneCallBackVO.getErrResult());
+//                    ServiceSubtaskMapper.updateServiceSubtask(ServiceSubtask);
+//                    redisCache.deleteObject(phoneCallBackVO.getUuid() + "uint8");
+//                } else if (integer != null && integer < ServiceSubtask.getRecallcount().intValue()) {
+//                    //杩涜閲嶆嫧
+//                    PhoneUtils phoneUtils = new PhoneUtils();
+//                    phoneUtils.ob(null, null, null, null, null, null, null, ServiceSubtask.getPhone(), phoneCallBackVO.getUuid(), true);
+//                }
+//            }
+//
+//        } else if (phoneCallBackVO.getResultType() == 2) {
+//            //閫氳瘽鐘舵�佹洿鏂版帴鍙�: 2
+//            if (phoneCallBackVO.getEnumState() == 0) {
+//                // 0-鎸搩
+//                Integer integer = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "enumState");
+//
+//                if (integer != null && integer < ServiceSubtask.getRecallcount().intValue()) {
+//                    redisCache.setCacheObject(phoneCallBackVO.getUuid() + "enumState", integer + 1, 120, TimeUnit.MINUTES);
+//                } else if (integer == null) {
+//                    redisCache.setCacheObject(phoneCallBackVO.getUuid() + "enumState", 1, 120, TimeUnit.MINUTES);
+//                } else if (integer != null && integer == ServiceSubtask.getRecallcount().intValue()) {
+//                    ServiceSubtask.setResult("鏃犱汉鎺ュ惉");
+//                    ServiceSubtaskMapper.updateServiceSubtask(ServiceSubtask);
+//                    redisCache.deleteObject(phoneCallBackVO.getUuid() + "enumState");
+//                }
+//            } else if (phoneCallBackVO.getEnumState() == 2) {
+//                //鎮h�呮寕鏂數璇�
+//                log.info("鎮h�呮寕鏂數璇濓細{}", phoneCallBackVO.getUuid());
+//                ServiceSubtask.setResult(phoneCallBackVO.getHangUpResult());
+//                ServiceSubtaskMapper.updateServiceSubtask(ServiceSubtask);
+//                redisCache.deleteObject(phoneCallBackVO.getUuid() + "enumState");
+//            }
+//
+//
+//        } else if (phoneCallBackVO.getResultType() == 3) {
+//            //璇煶璇嗗埆缁撴灉涓婃姤鎺ュ彛: 3
+//            Integer noVoice = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "noVoice");
+//            QuestionMessage returnQues = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "returnQues");
+//            IvrLibaTemplateScriptVO nowQuestion = returnQues.getNowQuestion();
+//            PhoneUtils phoneUtils = new PhoneUtils();
+//
+//            if (StringUtils.isEmpty(phoneCallBackVO.getTextResult())) {
+//                //鏃犲洖璇�
+//                //鍒ゆ柇noVoice鏄惁宸茬粡鍒颁簡鏈�澶у��
+//                if (noVoice == ivrLibaTemplateVO.getNoVoiceNum().intValue()) {
+//                    //宸茬粡闂簡瀵瑰簲鐨勯亶鏁帮紝灏卞垽鏂槸鍚﹁繕鏈変笅涓�棰�
+//                    if (nowQuestion.getTargetid() == ivrLibaTemplateScriptVOs.size()) {
+//                        //娌℃湁涓嬩竴棰樹簡锛屽氨鎸傛柇鐢佃瘽锛屾挱鏀剧粨鏉熻
+//                        redisCache.setCacheObject(phoneCallBackVO.getUuid() + "hangup", 1, 120, TimeUnit.MINUTES);
+//                        phoneUtils.ttsPlayback(ivrLibaTemplateVO.getRevisitAfter(), phoneCallBackVO.getUuid());
+//                    } else {
+//                        //鏈変笅涓�棰�
+//                        redisCache.setCacheObject(phoneCallBackVO.getUuid() + "noVoice", 0, 120, TimeUnit.MINUTES);
+//                        IvrLibaTemplateScriptVO nextQuestion = getNextQuestion(ivrLibaTemplateScriptVOs, nowQuestion);
+//                        // 闂锛�  鍘昏皟鐢ㄢ�渢ts鍚堟垚鍜屾挱鏀锯�濇帴鍙�
+//                        phoneUtils.ttsPlayback(nowQuestion.getQuestionText(), phoneCallBackVO.getUuid());
+//                    }
+//                } else {
+//                    redisCache.setCacheObject(phoneCallBackVO.getUuid() + "noVoice", noVoice + 1, 120, TimeUnit.MINUTES);
+//                    //璋冪敤ivrLibaTemplateScriptVO涓殑slienceText(闈欓粯璇濇湳)
+//                    String slienceText = nowQuestion.getSlienceText();
+//                    //闈欓粯璇濇湳  + 闂锛�  鍘昏皟鐢ㄢ�渢ts鍚堟垚鍜屾挱鏀锯�濇帴鍙�
+//                    phoneUtils.ttsPlayback(slienceText + nowQuestion.getQuestionText(), phoneCallBackVO.getUuid());
+//                    return new PhoneCallBackVO();
+//                }
+//
+//            } else {
+//                //鏈夊洖璇濓紝瀵瑰洖绛旂殑闂,杩涜姝e垯鍖归厤锛堣繖閲屽彧閽堝閫夋嫨棰橈紝鍏跺畠棰樺瀷涓嶈锛�
+//                for (int j = 0; j < nowQuestion.getIvrLibaScriptTargetoptionList().size(); j++) {
+//                    //鍖呭惈
+//                    Matcher matcher = null;
+//                    if (StringUtils.isNotEmpty(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex())) {
+//                        Pattern pattern = Pattern.compile(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex());
+//                        matcher = pattern.matcher(phoneCallBackVO.getTextResult());
+//                    }
+//                    //涓嶅寘鍚�
+//                    Matcher matcher2 = null;
+//                    if (StringUtils.isNotEmpty(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex2())) {
+//                        Pattern pattern2 = Pattern.compile(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex2());
+//                        matcher2 = pattern2.matcher(phoneCallBackVO.getTextResult());
+//                    }
+//                    log.info("phoneCallBack--Targetregex鐨勫�间负锛歿}, phoneCallBack--Targetregex2鐨勫�间负锛歿}", nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex(), nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex2());
+//                    if (StringUtils.isNotEmpty(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex()) && matcher.matches() && StringUtils.isNotEmpty(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex2()) && matcher2.matches() || StringUtils.isEmpty(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex()) && StringUtils.isNotEmpty(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex2()) && matcher2.matches() || StringUtils.isEmpty(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex2()) && StringUtils.isNotEmpty(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex()) && matcher.matches()) {
+//                        //璇存槑鍖归厤姝g‘浜�
+//                        //杩欓噷搴旇鍏堝垽鏂被鍨嬶紝鍘诲啀淇敼锛岃缃甀sUserOperation鏄崟閫夐鐨勬敼娉�
+//                        nowQuestion.getIvrLibaScriptTargetoptionList().get(j).setIsUserOperation(true);
+//                        ivrLibaScriptTargetoptionMapper.updateIvrLibaTemplateTargetoption(nowQuestion.getIvrLibaScriptTargetoptionList().get(j));
+//
+//
+//                        //灏嗛潤榛樼疆涓�0
+//                        redisCache.setCacheObject(phoneCallBackVO.getUuid() + "noVoice", 0, 120, TimeUnit.MINUTES);
+//                        redisCache.setCacheObject(phoneCallBackVO.getUuid() + "mateNum", 0, 120, TimeUnit.MINUTES);
+//                        //鑾峰彇涓嬩竴棰�
+//                        Integer nextQuestion = nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getNextQuestion();
+//                        for (IvrLibaTemplateScriptVO script : ivrLibaTemplateScriptVOs) {
+//                            if (script.getTargetid() == nextQuestion) {
+//                                QuestionMessage questionMessage = new QuestionMessage();
+//                                questionMessage.setNowQuestion(script);
+//                                questionMessage.setQuestionList(ivrLibaTemplateScriptVOs);
+//                                redisCache.setCacheObject(phoneCallBackVO.getUuid() + "returnQues", questionMessage, 120, TimeUnit.MINUTES);
+//                                break;
+//                            }
+//                        }
+//                        break;
+//                    } else {
+//                        //娌℃湁鍖归厤鍒�
+//                        Integer mateNum = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "mateNum");
+//                        //鏃犲尮閰嶆鏁板幓鍒ゆ柇鏄惁鍒版渶澶ц闂鏁帮紝骞朵笖鎵�鏈夌殑閫夐」閮藉尮閰嶅畬浜�
+//                        if (mateNum == ivrLibaTemplateVO.getMateNum().intValue() && j == nowQuestion.getIvrLibaScriptTargetoptionList().size() - 1) {
+//                            //濡傛灉涓嬩竴棰樹负绌�.鍒欐柊鐨勬暟鎹繑鍥�,骞跺姞涓婃劅璋㈣
+//                            if (nowQuestion.getTargetid() < ivrLibaTemplateScriptVOs.size()) {
+//                                QuestionMessage questionMessage = new QuestionMessage();
+//                                IvrLibaTemplateScriptVO nextQuestion = getNextQuestion(ivrLibaTemplateScriptVOs, nowQuestion);
+//                                questionMessage.setQuestionList(ivrLibaTemplateScriptVOs);
+//                                questionMessage.setNowQuestion(nextQuestion);
+//                                redisCache.setCacheObject(phoneCallBackVO.getUuid() + "returnQues", questionMessage, 120, TimeUnit.MINUTES);
+//                                redisCache.setCacheObject(phoneCallBackVO.getUuid() + "mateNum", 0, 120, TimeUnit.MINUTES);
+//                            } else {
+//                                //灏卞彲浠ユ寕鏂數璇濅簡
+//                                redisCache.setCacheObject(phoneCallBackVO.getUuid() + "hangup", 1, 120, TimeUnit.MINUTES);
+//                                phoneUtils.ttsPlayback(ivrLibaTemplateVO.getRevisitAfter(), phoneCallBackVO.getUuid());
+//                                break;
+//                            }
+//                        } else if (mateNum < ivrLibaTemplateVO.getMateNum().intValue() && j == nowQuestion.getIvrLibaScriptTargetoptionList().size() - 1) {
+//                            //娌℃湁闂埌瑙勫畾娆℃暟
+//                            mateNum = mateNum + 1;
+//                            redisCache.setCacheObject(phoneCallBackVO.getUuid() + "mateNum", mateNum, 120, TimeUnit.MINUTES);
+//                        }
+//                    }
+//
+//                }
+//                //閫夐」鍖归厤瀹屾垚鍚庯紝闇�瑕佸啀鍘婚�氳繃搴撳啀杩涜鍖归厤涓�娆�
+//                String extemplateID = ivrLibaTemplateVO.getSubmoduleID();
+//                String[] split = extemplateID.split(",");
+//                List<String> list = Arrays.asList(split);
+//                List<Long> list1 = new ArrayList<>();
+//                if (StringUtils.isNotEmpty(extemplateID)) {
+//                    for (String str : list) {
+//                        list1.add(Long.valueOf(str));
+//                    }
+//                    List<IvrLibaExtemplatescript> ivrLibaExtemplatescripts = ivrLibaExtemplatescriptMapper.queryIvrLibaExtemplatescriptList(list1);
+//                    for (IvrLibaExtemplatescript ivrLibaExtemplatescript : ivrLibaExtemplatescripts) {
+//                        Matcher matcher = null;
+//                        if (StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex())) {
+//                            Pattern pattern = Pattern.compile(ivrLibaExtemplatescript.getSelfRegex());
+//                            matcher = pattern.matcher(returnQues.getContent());
+//                        }
+//
+//                        Matcher matcher2 = null;
+//                        if (StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex2())) {
+//                            Pattern pattern2 = Pattern.compile(ivrLibaExtemplatescript.getSelfRegex2());
+//                            matcher2 = pattern2.matcher(returnQues.getContent());
+//                        }
+//                        log.info("++++++++++++++++++++++++++閫氱敤搴撴槸鍚︿负绌猴細selfRegex : {} , selfRegex2 : {}", ivrLibaExtemplatescript.getSelfRegex(), ivrLibaExtemplatescript.getSelfRegex2());
+//                        if (StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex()) && matcher.matches() && StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex2()) && matcher2.matches() || StringUtils.isEmpty(ivrLibaExtemplatescript.getSelfRegex()) && StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex2()) && matcher2.matches() || StringUtils.isEmpty(ivrLibaExtemplatescript.getSelfRegex2()) && StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex()) && matcher.matches()) {
+//                            QuestionMessage questionMessage = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "returnQues");
+//                            IvrLibaTemplateScriptVO ivrLibaTemplateScriptVO = returnQues.getNowQuestion();
+//                            ivrLibaTemplateScriptVO.setSubmoduleText(ivrLibaExtemplatescript.getSwitchText());
+//                            ivrLibaTemplateScriptVO.setSubmoduleVoice(ivrLibaExtemplatescript.getSwitchWav());
+//                            redisCache.setCacheObject(phoneCallBackVO.getUuid() + "returnQues", questionMessage, 120, TimeUnit.MINUTES);
+//                            if (ivrLibaExtemplatescript.getIsEnd() == 1) {
+//                                //灏嗛棶棰樼疆绌�
+//                                IvrLibaTemplateScriptVO nowQuestion1 = questionMessage.getNowQuestion();
+//                                nowQuestion1.setQuestionText(null);
+//                                nowQuestion1.setQuestionVoice(null);
+//                                questionMessage.setNowQuestion(nowQuestion1);
+//                                redisCache.setCacheObject(phoneCallBackVO.getUuid() + "returnQues", questionMessage, 120, TimeUnit.MINUTES);
+//
+//                                redisCache.setCacheObject(phoneCallBackVO.getUuid() + "isOver", 1, 120, TimeUnit.MINUTES);
+//                            }
+//
+//                            //璋冪敤鈥�15銆乼ts鍚堟垚鍜屾挱鏀撅紝 tts_playback鈥濆皢缁撴灉浼犲洖
+//
+//
+//                        }
+//                        break;
+//                    }
+//                }
+//
+//            }
+//        }
+//        return phoneCallBackVO;
+//    }
+
     @Override
     public Integer saveQuestionAnswerPhone(ServiceSubTaskDetailReq serviceSubTaskDetailReq) {
         int i = 0;
@@ -846,7 +1337,7 @@
             RSAPublicKeyExample rsaPublicKeyExample = new RSAPublicKeyExample();
             Long tid = Long.valueOf(rsaPublicKeyExample.decryptedData(serviceSubTaskDetailReq.getParam1(), pri_key));
             Long pid = Long.valueOf(rsaPublicKeyExample.decryptedData(serviceSubTaskDetailReq.getParam2(), pri_key));
-            ServiceSubtask ivrTaskSingle = new ServiceSubtask();
+            ServiceSubtaskVO ivrTaskSingle = new ServiceSubtaskVO();
             ivrTaskSingle.setTaskid(tid);
             ivrTaskSingle.setPatid(pid);
             List<ServiceSubtask> selectServiceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(ivrTaskSingle);
@@ -870,6 +1361,38 @@
         return i;
     }
 
+    @Override
+    public List<ServiceSubtaskCount> getSfFzInfoEveryMonth(ServiceSubtaskCountReq serviceSubtaskCountReq) {
+        if (serviceSubtaskCountReq.getUserId() == null) {
+            Long userId = SecurityUtils.getUserId();
+            serviceSubtaskCountReq.setUserId(userId);
+        }
+        if (serviceSubtaskCountReq.getStartTime() == null) {
+            LocalDate of = LocalDate.of(LocalDate.now().getYear(), 1, 1);
+            serviceSubtaskCountReq.setStartTime(Date.from(of.atStartOfDay(ZoneId.systemDefault()).toInstant()));
+        }
+        if (serviceSubtaskCountReq.getEndTime() == null) {
+            serviceSubtaskCountReq.setEndTime(new Date());
+        }
+        List<ServiceSubtaskCount> sfFzInfoEveryMonth = serviceSubtaskMapper.getSfFzInfoEveryMonth(serviceSubtaskCountReq);
+        List<ServiceSubtaskCount> result = sfFzInfoEveryMonth.stream().collect(Collectors.groupingBy(ServiceSubtaskCount::getMonth, Collectors.groupingBy(ServiceSubtaskCount::getServiceType, Collectors.summingLong(ServiceSubtaskCount::getCount)))).entrySet().stream().flatMap(monthEntry -> monthEntry.getValue().entrySet().stream().map(typeEntry -> new ServiceSubtaskCount(monthEntry.getKey(), typeEntry.getKey(), typeEntry.getValue()))).collect(Collectors.toList());
+
+        List<ServiceSubtaskCount> result2 = new ArrayList<>();
+        //鏍规嵁鏈嶅姟绫诲瀷杩涜绛涢��
+        if (CollectionUtils.isNotEmpty(serviceSubtaskCountReq.getServiceType())) {
+            for (ServiceSubtaskCount serviceSubtaskCount : result) {
+                for (Long type : serviceSubtaskCountReq.getServiceType()) {
+                    if (type == serviceSubtaskCount.getServiceType()) {
+                        result2.add(serviceSubtaskCount);
+                    }
+                }
+            }
+        } else {
+            result2 = result;
+        }
+        return result2;
+    }
+
     private IvrTaskTemplateScriptVO getNextQuestion(List<IvrTaskTemplateScriptVO> IvrTaskTemplateScriptVOList, IvrTaskTemplateScriptVO IvrTaskTemplateScriptVO) {
 
         for (int j = 0; j < IvrTaskTemplateScriptVOList.size(); j++) {
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceTaskServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/ServiceTaskServiceImpl.java
index 87c043d..ce70d11 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceTaskServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceTaskServiceImpl.java
@@ -172,16 +172,19 @@
             info = wjInfo(serviceTask, patid, isFinish);
         } else {
             //瀹f暀
-            info = xjInfo(Long.valueOf(serviceTask.getLibtemplateid()), taskid, patid,isFinish);
+            info = xjInfo(Long.valueOf(serviceTask.getLibtemplateid()), taskid, patid, isFinish);
         }
 
         //鍙鎵撳紑浜嗛〉闈紝灏辩畻鎴愬姛
-        ServiceSubtask ServiceTaskSingle = new ServiceSubtask();
-        ServiceTaskSingle.setTaskid(taskid);
-        ServiceTaskSingle.setPatid(patid);
-        ServiceTaskSingle.setResult("success");
-        ServiceTaskSingle.setFinishtime(new Date());
-        serviceSubtaskMapper.updateServiceSubtaskByCondition(ServiceTaskSingle);
+        if (isFinish) {
+            ServiceSubtask ss = new ServiceSubtask();
+            ss.setTaskid(taskid);
+            ss.setPatid(patid);
+            ss.setSendstate(1L);
+            ss.setResult("success");
+            ss.setFinishtime(new Date());
+            serviceSubtaskMapper.updateServiceSubtaskByCondition(ss);
+        }
         SvyTaskTemplate svyTaskTemplate = svyTaskTemplateMapper.selectSvyTaskTemplateBySvyid(serviceTask.getTemplateid());
         if (StringUtils.isNotEmpty(serviceTask.getKcb())) map.put("kcb", serviceTask.getKcb());
         map.put("script", info);
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceThirdDataServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/ServiceThirdDataServiceImpl.java
index abd1101..d4122ac 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceThirdDataServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceThirdDataServiceImpl.java
@@ -45,9 +45,9 @@
     @Override
     public List<ServiceThirdData> queryList(ServiceThirdData serviceThirdData) {
 
-        log.info("------serviceThirdData鐨勫叆鍙傦細{}", serviceThirdData);
+        log.error("------serviceThirdData鐨勫叆鍙傦細{}", serviceThirdData);
         List<ServiceThirdData> serviceThirdDataList = serviceThirdDataMapper.selectServiceThirdDataList(serviceThirdData);
-        log.info("------serviceThirdDataList鑾峰彇鏁版嵁鐨勬暟閲忥細{}", serviceThirdDataList.size());
+        log.error("------serviceThirdDataList鑾峰彇鏁版嵁鐨勬暟閲忥細{}", serviceThirdDataList.size());
         for (ServiceThirdData std : serviceThirdDataList) {
             PipeParser parser = new PipeParser();
             Message message = null;
@@ -86,7 +86,7 @@
                 }
 
                 HospitalRecord hospitalRecord = (HospitalRecord) objectList.get(0);
-                log.info("hospitalRecord鐨勫�间负锛歿}", hospitalRecord);
+                log.error("hospitalRecord鐨勫�间负锛歿}", hospitalRecord);
                 //濡傛灉patientid涓虹┖锛屽啀瀛榬ecord灏辨垚鑴忔暟鎹簡
                 if (StringUtils.isNotBlank(hospitalUserinfo.getPatientID())) {
                     hospitalRecord.setMessageID(std.getId().toString());
@@ -99,8 +99,9 @@
                     serviceThirdData2.setRemark("PatientID涓虹┖");
                 }
                 serviceThirdData2.setUserInfoId(hospitalUserinfo.getID());
+                log.error("serviceThirdData2鐨勫弬鏁帮細{}", serviceThirdData2);
                 int ii = serviceThirdDataMapper.updateIsDeal(serviceThirdData2);
-                System.out.println("鏄惁淇敼鎴愬姛锛�" + ii);
+                log.error("鏄惁淇敼鎴愬姛锛歿}", ii);
             } catch (HL7Exception e) {
                 e.printStackTrace();
             }
diff --git a/smartor/src/main/java/com/smartor/yiwudataanalysis/ADT_A03.java b/smartor/src/main/java/com/smartor/yiwudataanalysis/ADT_A03.java
index 7e1505f..51d8522 100644
--- a/smartor/src/main/java/com/smartor/yiwudataanalysis/ADT_A03.java
+++ b/smartor/src/main/java/com/smartor/yiwudataanalysis/ADT_A03.java
@@ -13,6 +13,7 @@
 import com.ruoyi.common.utils.StringUtils;
 import com.smartor.domain.HospitalRecord;
 import com.smartor.domain.HospitalUserinfo;
+import org.apache.commons.lang3.ObjectUtils;
 
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
@@ -373,7 +374,10 @@
 
         //鍑洪櫌鏃堕棿  A03 娑堟伅蹇呭~
         TS[] pv145_dischargeDateTime = pv1.getPv145_DischargeDateTime();
-        TS ts = pv145_dischargeDateTime[0];
+        TS ts = null;
+        if (pv145_dischargeDateTime != null && pv145_dischargeDateTime.length > 0) {
+            ts = pv145_dischargeDateTime[0];
+        }
 //        Date date2 = new Date(Long.valueOf(ts.encode()));
 //        SimpleDateFormat sdff = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 //        String dischargeDateTime = sdff.format(date2);
@@ -381,12 +385,13 @@
         SimpleDateFormat inputFormat = new SimpleDateFormat("yyyyMMddHHmmss"); // 杈撳叆鏃ユ湡鏍煎紡
         Date date2 = null; // 瑙f瀽涓篋ate瀵硅薄
         try {
-            date2 = inputFormat.parse(ts.encode());
+            if (ObjectUtils.isNotEmpty(ts)) date2 = inputFormat.parse(ts.encode());
         } catch (ParseException e) {
             e.printStackTrace();
         }
         SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 杈撳嚭鏃ユ湡鏍煎紡
-        String dischargeDateTime = outputFormat.format(date2);
+        String dischargeDateTime = null;
+        if (date2 != null) dischargeDateTime = outputFormat.format(date2);
 
         //璁块棶鏍囩ず
         String visitIndicator = pv1.getPv151_VisitIndicator().encode();
diff --git a/smartor/src/main/resources/mapper/smartor/PatArchiveMapper.xml b/smartor/src/main/resources/mapper/smartor/PatArchiveMapper.xml
index ad48259..1349cf4 100644
--- a/smartor/src/main/resources/mapper/smartor/PatArchiveMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/PatArchiveMapper.xml
@@ -500,14 +500,14 @@
             <if test="deptname != null and deptname != ''">
                 AND d.deptname LIKE concat('%',#{deptname}, '%')
             </if>
-            <if test="leavehospitaldistrictcodes != null">
+            <if test="leavehospitaldistrictcodes != null and leavehospitaldistrictcodes.size()>0">
                 AND d.leavehospitaldistrictcode IN
                 <foreach collection="leavehospitaldistrictcodes" item="leavehospitaldistrictcode" open="(" separator=","
                          close=")">
                     #{leavehospitaldistrictcode}
                 </foreach>
             </if>
-            <if test="leaveldeptcodes != null">
+            <if test="leaveldeptcodes != null and leaveldeptcodes.size() > 0">
                 AND d.leaveldeptcode IN
                 <foreach collection="leaveldeptcodes" item="leaveldeptcode" open="(" separator=","
                          close=")">
diff --git a/smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml b/smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml
index 52c1d4a..997a089 100644
--- a/smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml
@@ -170,6 +170,20 @@
             and b.del_flag=0
             and a.id = b.patid
             AND a.idcardno != ''
+            <if test="startOutHospTime != null">
+                AND date_format(b.endtime,'%y%m%d') &gt;= date_format(#{startOutHospTime},'%y%m%d')
+            </if>
+            <if test="endOutHospTime != null">
+                AND date_format(b.endtime,'%y%m%d') &lt;= date_format(#{endOutHospTime},'%y%m%d')
+            </if>
+
+
+                <if test="startInHospTime != null">
+                AND date_format(b.starttime,'%y%m%d') &gt;= date_format(#{startInHospTime},'%y%m%d')
+            </if>
+            <if test="endInHospTime != null">
+                AND date_format(b.starttime,'%y%m%d') &lt;= date_format(#{endInHospTime},'%y%m%d')
+            </if>
             <if test="hospitalname != null  and hospitalname != ''">and hospitalname like concat('%', #{hospitalname},
                 '%')
             </if>
@@ -204,14 +218,14 @@
                 b.leavehospitaldistrictname like concat('%', #{leavehospitaldistrictname}, '%')
             </if>
 
-            <if test="leavehospitaldistrictcodes != null">
+            <if test="leavehospitaldistrictcodes != null and leavehospitaldistrictcodes.size()>0">
                 AND b.leavehospitaldistrictcode IN
                 <foreach collection="leavehospitaldistrictcodes" item="leavehospitaldistrictcode" open="(" separator=","
                          close=")">
                     #{leavehospitaldistrictcode}
                 </foreach>
             </if>
-            <if test="leaveldeptcodes != null">
+            <if test="leaveldeptcodes != null and leaveldeptcodes.size()>0">
                 AND b.leaveldeptcode IN
                 <foreach collection="leaveldeptcodes" item="leaveldeptcode" open="(" separator=","
                          close=")">
@@ -300,14 +314,14 @@
                 #{leavediagname}, '%')
             </if>
             <if test="drname != null  and drname != ''">and b.drname like concat('%', #{drname}, '%')</if>
-            <if test="leavehospitaldistrictcodes != null ">
+            <if test="leavehospitaldistrictcodes != null and leavehospitaldistrictcodes.size()>0">
                 AND b.leavehospitaldistrictcode IN
                 <foreach collection="leavehospitaldistrictcodes" item="leavehospitaldistrictcode" open="(" separator=","
                          close=")">
                     #{leavehospitaldistrictcode}
                 </foreach>
             </if>
-            <if test="leaveldeptcodes != null">
+            <if test="leaveldeptcodes != null and leaveldeptcodes.size()>0">
                 AND b.leaveldeptcode IN
                 <foreach collection="leaveldeptcodes" item="leaveldeptcode" open="(" separator=","
                          close=")">
diff --git a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
index 4084d2b..0019030 100644
--- a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
@@ -178,14 +178,20 @@
             <if test="templatename != null  and templatename != ''">and templatename like concat('%', #{templatename},
                 '%')
             </if>
-            <if test="leavehospitaldistrictcodes != null">
+            <if test="startOutHospTime != null">
+                AND date_format(endtime,'%y%m%d') &gt;= date_format(#{startOutHospTime},'%y%m%d')
+            </if>
+            <if test="endOutHospTime != null">
+                AND date_format(endtime,'%y%m%d') &lt;= date_format(#{endOutHospTime},'%y%m%d')
+            </if>
+            <if test="leavehospitaldistrictcodes != null and leavehospitaldistrictcodes.size() > 0">
                 AND leavehospitaldistrictcode IN
                 <foreach collection="leavehospitaldistrictcodes" item="leavehospitaldistrictcode" open="(" separator=","
                          close=")">
                     #{leavehospitaldistrictcode}
                 </foreach>
             </if>
-            <if test=" leaveldeptcodes != null">
+            <if test=" leaveldeptcodes != null and leaveldeptcodes.size()>0">
                 AND deptcode IN
                 <foreach collection="leaveldeptcodes" item="leaveldeptcode" open="(" separator=","
                          close=")">
@@ -541,6 +547,7 @@
             <if test="sendname != null">sendname = #{sendname},</if>
             <if test="phone != null">phone = #{phone},</if>
             <if test="sex != null">sex = #{sex},</if>
+            <if test="sendstate != null ">sendstate = #{sendstate},</if>
             <if test="age != null">age = #{age},</if>
             <if test="sfzh != null">sfzh = #{sfzh},</if>
             <if test="addr != null">addr = #{addr},</if>
diff --git a/smartor/src/main/resources/mapper/smartor/ServiceTaskMapper.xml b/smartor/src/main/resources/mapper/smartor/ServiceTaskMapper.xml
index 167731b..f9e35c8 100644
--- a/smartor/src/main/resources/mapper/smartor/ServiceTaskMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/ServiceTaskMapper.xml
@@ -147,14 +147,14 @@
             <if test="leavehospitaldistrictname != null  ">and leavehospitaldistrictname = #{leavehospitaldistrictname}</if>
             <if test="leavehospitaldistrictcode != null  ">and leavehospitaldistrictcode = #{leavehospitaldistrictcode}</if>
 
-            <if test="leavehospitaldistrictcodes != null ">
+            <if test="leavehospitaldistrictcodes != null and leavehospitaldistrictcodes.size()>0">
                 AND leavehospitaldistrictcode IN
                 <foreach collection="leavehospitaldistrictcodes" item="leavehospitaldistrictcode" open="(" separator=","
                          close=")">
                     #{leavehospitaldistrictcode}
                 </foreach>
             </if>
-            <if test="leaveldeptcodes != null">
+            <if test="leaveldeptcodes != null and leaveldeptcodes.size()>0">
                 AND deptcode IN
                 <foreach collection="leaveldeptcodes" item="leaveldeptcode" open="(" separator=","
                          close=")">
@@ -316,7 +316,7 @@
             <if test="serviceType != null  and serviceType != ''">service_type = #{serviceType},</if>
             <if test="longTask != null  and longTask != ''">long_task = #{longTask},</if>
             <if test="kcb != null  and kcb != ''">kcb = #{kcb},</if>
-            <if test="jsy != null  and jsy != ''">kcb = #{jsy},</if>
+            <if test="jsy != null  and jsy != ''">jsy = #{jsy},</if>
             <if test="leavehospitaldistrictname != null  ">leavehospitaldistrictname = #{leavehospitaldistrictname},</if>
             <if test="leavehospitaldistrictcode != null  ">leavehospitaldistrictcode = #{leavehospitaldistrictcode},</if>
         </trim>
diff --git a/smartor/src/main/resources/mapper/smartor/SvyTaskTemplateMapper.xml b/smartor/src/main/resources/mapper/smartor/SvyTaskTemplateMapper.xml
index 6b157c5..2dfc0ba 100644
--- a/smartor/src/main/resources/mapper/smartor/SvyTaskTemplateMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/SvyTaskTemplateMapper.xml
@@ -131,7 +131,7 @@
 
     <select id="selectSvyTaskTemplateBySvyid" parameterType="Long" resultMap="SvyTaskTemplateResult">
         <include refid="selectSvyTaskTemplateVo"/>
-        where id = #{id}
+        where del_flag=0 and  id = #{id}
     </select>
 
     <insert id="insertSvyTaskTemplate" parameterType="com.smartor.domain.SvyTaskTemplate" useGeneratedKeys="true"

--
Gitblit v1.9.3