From bb60b5747d5f4b85655a541d4990ec7464497b1b Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期五, 10 五月 2024 18:18:02 +0800
Subject: [PATCH] 代码提交

---
 smartor/src/main/java/com/smartor/mapper/PatWildcardMapper.java                         |   63 ++
 smartor/src/main/java/com/smartor/domain/PatWildcard.java                               |   48 +
 smartor/src/main/java/com/smartor/domain/IvrTaskSingle.java                             |    9 
 smartor/src/main/java/com/smartor/service/impl/IvrLibaTargetServiceImpl.java            |    2 
 smartor/src/main/java/com/smartor/domain/PatArchive.java                                |    6 
 ruoyi-admin/src/main/java/com/ruoyi/web/task/PhoneTask.java                             |   63 +
 smartor/src/main/resources/mapper/smartor/SvyLibTopicMapper.xml                         |    3 
 ruoyi-ui/src/api/system/dict/type.js                                                    |   12 
 smartor/src/main/java/com/smartor/service/impl/IvrTaskSingleServiceImpl.java            |  407 ++++++++-------
 smartor/src/main/java/com/smartor/domain/IvrTask.java                                   |   13 
 smartor/src/main/java/com/smartor/domain/PatArchiveVO.java                              |    6 
 smartor/src/main/java/com/smartor/config/PhoneUtils.java                                |    1 
 smartor/src/main/java/com/smartor/service/impl/PatWildcardServiceImpl.java              |   90 +++
 smartor/src/main/resources/mapper/smartor/IvrTaskSingleMapper.xml                       |   29 
 smartor/src/main/java/com/smartor/domain/PatTaskRelevance.java                          |    7 
 smartor/src/main/resources/mapper/smartor/PatWildcardMapper.xml                         |   92 +++
 smartor/src/main/java/com/smartor/common/SendService.java                               |   36 +
 smartor/src/main/resources/mapper/smartor/IvrTaskMapper.xml                             |   25 
 ruoyi-admin/src/main/java/com/ruoyi/web/task/PhoneTask2.java                            |   86 +++
 smartor/src/main/java/com/smartor/domain/IvrTaskSingleVO.java                           |  202 +++----
 smartor/src/main/java/com/smartor/mapper/IvrTaskMapper.java                             |    2 
 ruoyi-ui/src/api/system/config.js                                                       |   10 
 smartor/src/main/resources/mapper/smartor/PatArchiveMapper.xml                          |   42 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/IvrTaskSingleController.java |   10 
 ruoyi-admin/src/main/java/com/ruoyi/web/test/MQTest.java                                |   27 
 smartor/src/main/java/com/smartor/domain/IvrTaskVO.java                                 |    9 
 ruoyi-admin/src/main/java/com/ruoyi/web/component/RabbitMqReceiver.java                 |   29 +
 smartor/src/main/java/com/smartor/service/IPatWildcardService.java                      |   62 ++
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/PatWildcardController.java   |   98 +++
 29 files changed, 1,057 insertions(+), 432 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/component/RabbitMqReceiver.java b/ruoyi-admin/src/main/java/com/ruoyi/web/component/RabbitMqReceiver.java
index fa8a7ec..13df8de 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/component/RabbitMqReceiver.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/component/RabbitMqReceiver.java
@@ -3,11 +3,16 @@
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.ruoyi.common.core.redis.RedisCache;
+import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.web.task.PhoneTask;
+import com.ruoyi.web.task.PhoneTask2;
+import com.smartor.common.SendService;
 import com.smartor.config.RabbitMqConfig;
 import com.smartor.domain.IvrLibaTemplateVO;
+import com.smartor.domain.IvrTask;
 import com.smartor.domain.IvrTaskSingle;
 import com.smartor.domain.IvrTaskcallMQ;
+import com.smartor.mapper.IvrTaskMapper;
 import com.smartor.mapper.IvrTaskSingleMapper;
 import com.smartor.service.IIvrLibaTemplateService;
 import lombok.extern.slf4j.Slf4j;
@@ -34,6 +39,10 @@
 
     private static IvrTaskSingleMapper ivrTaskcallMapper;
 
+    private static IvrTaskMapper ivrTaskMapper;
+
+    private static SendService sendService;
+
     private static RedisCache redisCache;
 
     // 鍒涘缓鍥哄畾澶у皬鐨勭嚎绋嬫睜
@@ -46,8 +55,18 @@
     }
 
     @Autowired
+    public void setSendService(SendService sendService) {
+        RabbitMqReceiver.sendService = sendService;
+    }
+
+    @Autowired
     public void setIvrTaskcallMapper(IvrTaskSingleMapper ivrTaskcallMapper) {
         RabbitMqReceiver.ivrTaskcallMapper = ivrTaskcallMapper;
+    }
+
+    @Autowired
+    public void setIvrTaskMapper(IvrTaskMapper ivrTaskMapper) {
+        RabbitMqReceiver.ivrTaskMapper = ivrTaskMapper;
     }
 
     @Autowired
@@ -100,8 +119,14 @@
             List<IvrTaskSingle> ivrTaskcalls = ivrTaskcallMapper.selectIvrTaskcallList(ivrTaskcall);
 
             for (IvrTaskSingle ivrTaskcall1 : ivrTaskcalls) {
-                //閫氳繃澶氱嚎绋嬬殑鏂瑰紡鍘绘墦鐢佃瘽
-                executorService.submit(new PhoneTask(ivrTaskcall1, ivrLibaTemplateVO1, redisCache, channel, message));
+                IvrTask ivrTask = ivrTaskMapper.selectIvrTaskByTaskid(ivrTaskcall1.getTaskid());
+                if (StringUtils.isNotEmpty(ivrTask.getSendState()) && ivrTask.getSendState().equals(3) || StringUtils.isNotEmpty(ivrTask.getSendState()) && ivrTask.getSendState().equals(4)) {
+                    //濡備綍浠诲姟琚�滄殏鍋溾�濇垨鈥滅粓姝⑩��
+                    break;
+                }
+//                //閫氳繃澶氱嚎绋嬬殑鏂瑰紡鍘绘墦鐢佃瘽
+//                executorService.submit(new PhoneTask(ivrTaskcall1, ivrLibaTemplateVO1, redisCache, channel, message, sendService));
+                new PhoneTask2().runPhone(ivrTaskcall1, ivrLibaTemplateVO1, redisCache, channel, message, sendService);
             }
             //閫氱煡 MQ 娑堟伅宸茶鎺ユ敹,鍙互ACK(浠庨槦鍒椾腑鍒犻櫎)浜�   锛堣繖涓渶瑕佹牴鎹笟鍔″啀鍘诲鐞咥CK锛�
             channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/IvrTaskSingleController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/IvrTaskSingleController.java
index f42d2d6..d201967 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/IvrTaskSingleController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/IvrTaskSingleController.java
@@ -3,6 +3,8 @@
 import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.domain.model.LoginUser;
 import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.common.utils.DtoConversionUtils;
@@ -76,6 +78,10 @@
     @Log(title = "鍗曚竴浠诲姟锛堥殢璁匡級", businessType = BusinessType.INSERT)
     @PostMapping("/insertOrUpdateTask")
     public AjaxResult insertOrUpdateHeTask(@RequestBody IvrTaskSingleVO ivrTaskcallVO) {
+
+        LoginUser loginUser = getLoginUser();
+        SysUser user = loginUser.getUser();
+        ivrTaskcallVO.setCreateBy(user.getNickName());
         return toAjax(ivrTaskcallService.insertOrUpdateTask(ivrTaskcallVO));
     }
 
@@ -95,7 +101,7 @@
      * 浠诲姟鍙戦�佹墽琛�
      */
     @ApiOperation("浠诲姟鍙戦�佹墽琛�")
-    @PostMapping("/heTaskSend")
+    @PostMapping("/taskSend")
     public AjaxResult heTaskSend(@RequestBody IvrTaskSingleVO ivrTaskcallVO) {
         return toAjax(ivrTaskcallService.heTaskSend(ivrTaskcallVO));
     }
@@ -106,7 +112,7 @@
     @ApiOperation("鐢佃瘽鍥炶皟浠诲姟")
     @PostMapping("/phoneCallBack")
     public AjaxResult phoneCallBack(@RequestBody PhoneCallBackVO phoneCallBackVO) {
-        log.error("鐢佃瘽鍥炶皟浠诲姟鎴愬姛浜嗕笉锛焮}", phoneCallBackVO);
+//        log.error("鐢佃瘽鍥炶皟浠诲姟鎴愬姛浜嗕笉锛焮}", phoneCallBackVO);
         ivrTaskcallService.phoneCallBack(phoneCallBackVO);
         return success();
     }
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/PatWildcardController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/PatWildcardController.java
new file mode 100644
index 0000000..0a8b6d6
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/PatWildcardController.java
@@ -0,0 +1,98 @@
+package com.ruoyi.web.controller.smartor;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.smartor.domain.PatWildcard;
+import com.smartor.service.IPatWildcardService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 鎮h�呬俊鎭�氶厤绗ontroller
+ *
+ * @author ruoyi
+ * @date 2024-05-09
+ */
+@RestController
+@RequestMapping("/smartor/wildcard")
+public class PatWildcardController extends BaseController
+{
+    @Autowired
+    private IPatWildcardService patWildcardService;
+
+    /**
+     * 鏌ヨ鎮h�呬俊鎭�氶厤绗﹀垪琛�
+     */
+    @PreAuthorize("@ss.hasPermi('system:wildcard:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(PatWildcard patWildcard)
+    {
+        startPage();
+        List<PatWildcard> list = patWildcardService.selectPatWildcardList(patWildcard);
+        return getDataTable(list);
+    }
+
+    /**
+     * 瀵煎嚭鎮h�呬俊鎭�氶厤绗﹀垪琛�
+     */
+    @PreAuthorize("@ss.hasPermi('system:wildcard:export')")
+    @Log(title = "鎮h�呬俊鎭�氶厤绗�", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, PatWildcard patWildcard)
+    {
+        List<PatWildcard> list = patWildcardService.selectPatWildcardList(patWildcard);
+        ExcelUtil<PatWildcard> util = new ExcelUtil<PatWildcard>(PatWildcard.class);
+        util.exportExcel(response, list, "鎮h�呬俊鎭�氶厤绗︽暟鎹�");
+    }
+
+    /**
+     * 鑾峰彇鎮h�呬俊鎭�氶厤绗﹁缁嗕俊鎭�
+     */
+    @PreAuthorize("@ss.hasPermi('system:wildcard:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(patWildcardService.selectPatWildcardById(id));
+    }
+
+    /**
+     * 鏂板鎮h�呬俊鎭�氶厤绗�
+     */
+    @PreAuthorize("@ss.hasPermi('system:wildcard:add')")
+    @Log(title = "鎮h�呬俊鎭�氶厤绗�", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody PatWildcard patWildcard)
+    {
+        return toAjax(patWildcardService.insertPatWildcard(patWildcard));
+    }
+
+    /**
+     * 淇敼鎮h�呬俊鎭�氶厤绗�
+     */
+    @PreAuthorize("@ss.hasPermi('system:wildcard:edit')")
+    @Log(title = "鎮h�呬俊鎭�氶厤绗�", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody PatWildcard patWildcard)
+    {
+        return toAjax(patWildcardService.updatePatWildcard(patWildcard));
+    }
+
+    /**
+     * 鍒犻櫎鎮h�呬俊鎭�氶厤绗�
+     */
+    @PreAuthorize("@ss.hasPermi('system:wildcard:remove')")
+    @Log(title = "鎮h�呬俊鎭�氶厤绗�", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(patWildcardService.deletePatWildcardByIds(ids));
+    }
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/task/PhoneTask.java b/ruoyi-admin/src/main/java/com/ruoyi/web/task/PhoneTask.java
index babadc5..d719abf 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/task/PhoneTask.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/task/PhoneTask.java
@@ -1,39 +1,37 @@
 package com.ruoyi.web.task;
 
-import com.alibaba.fastjson2.JSON;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.rabbitmq.client.Channel;
 import com.ruoyi.common.core.redis.RedisCache;
+import com.ruoyi.common.utils.DtoConversionUtils;
 import com.ruoyi.common.utils.uuid.IdUtils;
+import com.smartor.common.SendService;
 import com.smartor.config.PhoneUtils;
-import com.smartor.domain.IvrLibaTemplateScriptVO;
-import com.smartor.domain.IvrLibaTemplateVO;
-import com.smartor.domain.IvrTaskSingle;
-import com.smartor.domain.QuestionMessage;
-import com.smartor.mapper.IvrTaskSingleMapper;
+import com.smartor.domain.*;
 import org.springframework.amqp.core.Message;
+import org.springframework.data.convert.Jsr310Converters;
 
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.concurrent.TimeUnit;
 
 public class PhoneTask implements Runnable {
-    private IvrTaskSingle ivrTaskcall;
+    private IvrTaskSingle ivrTaskSingle;
     private List<IvrLibaTemplateScriptVO> ivrLibaTemplateScriptVO;
     private RedisCache redisCache;
     private IvrLibaTemplateVO ivrLibaTemplateVO;
     private Channel channel;
     private Message message;
+    private SendService sendService;
 
-    public PhoneTask(IvrTaskSingle ivrTaskcall, IvrLibaTemplateVO ivrLibaTemplateVO, RedisCache redisCache, Channel channel, Message message) {
-        this.ivrTaskcall = ivrTaskcall;
-        this.ivrLibaTemplateScriptVO = ivrLibaTemplateVO.getIvrLibaTemplateScriptVOList();
-        this.ivrLibaTemplateVO = ivrLibaTemplateVO;
+
+    public PhoneTask(IvrTaskSingle ivrTaskSingle, IvrLibaTemplateVO ivrLibaTemplateVO, RedisCache redisCache, Channel channel, Message message, SendService sendService) {
+        this.ivrTaskSingle = DtoConversionUtils.sourceToTarget(ivrTaskSingle, IvrTaskSingle.class);
+        this.ivrLibaTemplateScriptVO = DtoConversionUtils.sourceToTarget(ivrLibaTemplateVO.getIvrLibaTemplateScriptVOList(), IvrLibaTemplateScriptVO.class);
+        this.ivrLibaTemplateVO = DtoConversionUtils.sourceToTarget(ivrLibaTemplateVO, IvrLibaTemplateVO.class);
         this.redisCache = redisCache;
         this.channel = channel;
         this.message = message;
+        this.sendService = sendService;
     }
 
     @Override
@@ -42,9 +40,26 @@
             try {
                 //鑾峰彇鐢佃瘽缁勶紝鏌ョ湅鍝簺鐢佃瘽鍙互浣跨敤
                 PhoneUtils phoneUtils = new PhoneUtils();
-                String uuid = IdUtils.randomUUID();
+                final String uuid = IdUtils.randomUUID();
+                //鑾峰彇鎵�鏈夌殑鈥滈�氶厤绗︹�濋敭鍊煎
+                ObjectMapper objectMapper = new ObjectMapper();
+                Map<String, Map<String, String>> ivrTaskSingleMmap = objectMapper.readValue(ivrTaskSingle.getTextParam(), Map.class);
+                List<Map<String, String>> mapList = new ArrayList<>();
+                if (!Objects.isNull(ivrTaskSingleMmap)) {
+                    for (Map<String, String> map : ivrTaskSingleMmap.values()) {
+                        mapList.add(map);
+                    }
+                    //灏嗘ā鏉块棶棰樿瘽鏈噷鐨勯�氶厤绗︽浛鎹�
+                    for (IvrLibaTemplateScriptVO ivrLibaTemplateScriptVO : ivrLibaTemplateScriptVO) {
+                        for (Map<String, String> map : mapList) {
+                            for (String key : map.keySet()) {
+                                ivrLibaTemplateScriptVO.setQuestionText(ivrLibaTemplateScriptVO.getQuestionText().replace(key, map.get(key)));
+                            }
+                        }
+                    }
+                }
                 Map<String, Object> objectMap = new HashMap<>();
-                objectMap.put("ivrTaskcall", ivrTaskcall);
+                objectMap.put("ivrTaskSingle", ivrTaskSingle);
                 objectMap.put("ivrLibaTemplateScriptVO", ivrLibaTemplateScriptVO);
                 //灏嗘暟鎹斁鍒皉edis涓紝鏂逛究鍦ㄥ洖璋冩柟娉曢噷鑾峰彇
                 redisCache.setCacheObject(uuid, objectMap, 120, TimeUnit.MINUTES);
@@ -62,16 +77,18 @@
                 redisCache.setCacheObject(uuid + "returnQues", returnQues, 120, TimeUnit.MINUTES);
                 redisCache.setCacheObject(uuid + "ivrLibaTemplateVO", ivrLibaTemplateVO, 120, TimeUnit.MINUTES);
 
+                System.out.println("----------------uuID涓� 锛�" + uuid + "       " + ivrTaskSingle.getSendname() + "       " + returnQues.getNowQuestion().getQuestionText() + "     " + ivrTaskSingle.getPhone());
+
                 //璋冪敤鏈哄櫒浜虹數璇濓紝寮�濮嬬數璇濓紙闇�瑕佸皢鍥炶皟鏂规硶浼犲叆锛岃繖涓瓑鈥濈數璇濇柟鈥滃憡璇夋�庝箞浼狅紝鐜板湪鍏堢┖鐫�,杩樻湁绗竴鍙ラ棶棰樿瘽鏈級
-                String ob = phoneUtils.ob("", "", "", "", "", "", "", ivrTaskcall.getPhone(), uuid, true);
+                String ob = phoneUtils.ob("", "", "", "", "", "", "", ivrTaskSingle.getPhone(), uuid, true);
                 System.out.println("OB鐨勫�间负锛�" + ob);
                 //閫氫簡涔嬪悗锛岀珛椹幓璋冨紑鍦虹櫧
-                phoneUtils.ttsPlayback(ivrLibaTemplateVO.getRevisitBefore()+returnQues.getNowQuestion().getQuestionText(), uuid);
+                System.out.println("闂鐨勫�间负锛�" + returnQues.getNowQuestion().getQuestionText() + "       " + uuid);
+                phoneUtils.ttsPlayback(ivrLibaTemplateVO.getRevisitBefore() + returnQues.getNowQuestion().getQuestionText(), uuid);
 
-                //閫氱煡 MQ 娑堟伅宸茶鎺ユ敹,鍙互ACK(浠庨槦鍒椾腑鍒犻櫎)浜�   锛堣繖涓渶瑕佹牴鎹笟鍔″啀鍘诲鐞咥CK锛�
-
-                channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
-            } catch (IOException e) {
+//                //閫氱煡 MQ 娑堟伅宸茶鎺ユ敹,鍙互ACK(浠庨槦鍒椾腑鍒犻櫎)浜�   锛堣繖涓渶瑕佹牴鎹笟鍔″啀鍘诲鐞咥CK锛�
+//                channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
+            } catch (Exception e) {
                 e.printStackTrace();
             }
         }
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/task/PhoneTask2.java b/ruoyi-admin/src/main/java/com/ruoyi/web/task/PhoneTask2.java
new file mode 100644
index 0000000..1daa520
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/task/PhoneTask2.java
@@ -0,0 +1,86 @@
+package com.ruoyi.web.task;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.rabbitmq.client.Channel;
+import com.ruoyi.common.core.redis.RedisCache;
+import com.ruoyi.common.utils.uuid.IdUtils;
+import com.smartor.common.SendService;
+import com.smartor.config.PhoneUtils;
+import com.smartor.domain.IvrLibaTemplateScriptVO;
+import com.smartor.domain.IvrLibaTemplateVO;
+import com.smartor.domain.IvrTaskSingle;
+import com.smartor.domain.QuestionMessage;
+import org.springframework.amqp.core.Message;
+
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+
+public class PhoneTask2 {
+//    private IvrTaskSingle ivrTaskSingle;
+//    private List<IvrLibaTemplateScriptVO> ivrLibaTemplateScriptVO;
+//    private RedisCache redisCache;
+//    private IvrLibaTemplateVO ivrLibaTemplateVO;
+//    private Channel channel;
+//    private Message message;
+//    private SendService sendService;
+
+
+    public void runPhone(IvrTaskSingle ivrTaskSingle, IvrLibaTemplateVO ivrLibaTemplateVO, RedisCache redisCache, Channel channel, Message message, SendService sendService) {
+
+        try {
+            //鑾峰彇鐢佃瘽缁勶紝鏌ョ湅鍝簺鐢佃瘽鍙互浣跨敤
+            PhoneUtils phoneUtils = new PhoneUtils();
+            String uuid = IdUtils.randomUUID();
+            //鑾峰彇鎵�鏈夌殑鈥滈�氶厤绗︹�濋敭鍊煎
+            ObjectMapper objectMapper = new ObjectMapper();
+            Map<String, Map<String, String>> ivrTaskSingleMmap = objectMapper.readValue(ivrTaskSingle.getTextParam(), Map.class);
+            List<Map<String, String>> mapList = new ArrayList<>();
+            if (!Objects.isNull(ivrTaskSingleMmap)) {
+                for (Map<String, String> map : ivrTaskSingleMmap.values()) {
+                    mapList.add(map);
+                }
+                //灏嗘ā鏉块棶棰樿瘽鏈噷鐨勯�氶厤绗︽浛鎹�
+                for (IvrLibaTemplateScriptVO ivrLibaTemplateScriptVO : ivrLibaTemplateVO.getIvrLibaTemplateScriptVOList()) {
+                    for (Map<String, String> map : mapList) {
+                        for (String key : map.keySet()) {
+                            ivrLibaTemplateScriptVO.setQuestionText(ivrLibaTemplateScriptVO.getQuestionText().replace(key, map.get(key)));
+                        }
+                    }
+                }
+            }
+            Map<String, Object> objectMap = new HashMap<>();
+            objectMap.put("ivrTaskSingle", ivrTaskSingle);
+            objectMap.put("ivrLibaTemplateScriptVO", ivrLibaTemplateVO.getIvrLibaTemplateScriptVOList());
+            //灏嗘暟鎹斁鍒皉edis涓紝鏂逛究鍦ㄥ洖璋冩柟娉曢噷鑾峰彇
+            redisCache.setCacheObject(uuid, objectMap, 120, TimeUnit.MINUTES);
+
+            //璁板綍棣栨闂
+            QuestionMessage returnQues = new QuestionMessage();
+            returnQues.setKcb(ivrLibaTemplateVO.getRevisitBefore());
+            for (IvrLibaTemplateScriptVO ivrLibaTemplateScriptVO : ivrLibaTemplateVO.getIvrLibaTemplateScriptVOList()) {
+                if (ivrLibaTemplateScriptVO.getTargetid() == ivrLibaTemplateVO.getFirstQuestionNum().intValue()) {
+                    returnQues.setNowQuestion(ivrLibaTemplateScriptVO);
+                }
+            }
+            returnQues.setQuestionList(ivrLibaTemplateVO.getIvrLibaTemplateScriptVOList());
+            //灏嗛棶棰橈紝鍜屾ā鏉夸俊鎭斁鍒皉edis涓�
+            redisCache.setCacheObject(uuid + "returnQues", returnQues, 120, TimeUnit.MINUTES);
+            redisCache.setCacheObject(uuid + "ivrLibaTemplateVO", ivrLibaTemplateVO, 120, TimeUnit.MINUTES);
+
+            System.out.println("----------------uuID涓� 锛�" + uuid + "       " + ivrTaskSingle.getSendname() + "       " + returnQues.getNowQuestion().getQuestionText() + "     " + ivrTaskSingle.getPhone());
+
+            //璋冪敤鏈哄櫒浜虹數璇濓紝寮�濮嬬數璇濓紙闇�瑕佸皢鍥炶皟鏂规硶浼犲叆锛岃繖涓瓑鈥濈數璇濇柟鈥滃憡璇夋�庝箞浼狅紝鐜板湪鍏堢┖鐫�,杩樻湁绗竴鍙ラ棶棰樿瘽鏈級
+            String ob = phoneUtils.ob("", "", "", "", "", "", "", ivrTaskSingle.getPhone(), uuid, true);
+            System.out.println("OB鐨勫�间负锛�" + ob);
+            //閫氫簡涔嬪悗锛岀珛椹幓璋冨紑鍦虹櫧
+            System.out.println("闂鐨勫�间负锛�" + returnQues.getNowQuestion().getQuestionText() + "       " + uuid);
+            phoneUtils.ttsPlayback(ivrLibaTemplateVO.getRevisitBefore() + returnQues.getNowQuestion().getQuestionText(), uuid);
+
+//                //閫氱煡 MQ 娑堟伅宸茶鎺ユ敹,鍙互ACK(浠庨槦鍒椾腑鍒犻櫎)浜�   锛堣繖涓渶瑕佹牴鎹笟鍔″啀鍘诲鐞咥CK锛�
+//                channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/test/MQTest.java b/ruoyi-admin/src/main/java/com/ruoyi/web/test/MQTest.java
index 07f6726..0bc2d96 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/test/MQTest.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/test/MQTest.java
@@ -1,13 +1,12 @@
 package com.ruoyi.web.test;
 
-import com.smartor.config.RabbitMqConfig;
+import com.ruoyi.web.task.PhoneTask;
 import org.junit.Test;
 import org.springframework.amqp.rabbit.core.RabbitTemplate;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.core.SpringVersion;
 
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 
 //@SpringBootTest
 //@RunWith(SpringRunner.class)
@@ -17,14 +16,16 @@
 
     @Test
     public void testSend() {
-
-
-        Pattern pattern = Pattern.compile("(?=.*(?:杩樿|鎸哄ソ|鍙互|涓嶉敊)).*$");
-        Matcher matcher = pattern.matcher("杩樿鍚э紝灏辨槸杩樻湁鐐圭柤");
-        System.out.println(matcher.matches());
-        System.out.println("Spring Framework鐗堟湰锛�" + SpringVersion.getVersion());
-//        rabbitTemplate.convertAndSend(RabbitMqConfig.EXCHANGE_NAME, "phone.001", "娴嬭瘯鏁版嵁001");
-//        rabbitTemplate.convertAndSend(RabbitMqConfig.EXCHANGE_NAME, "phone.002", "娴嬭瘯鏁版嵁002");
-//        rabbitTemplate.convertAndSend(RabbitMqConfig.EXCHANGE_NAME, "phone.003", "娴嬭瘯鏁版嵁003");
+        String str = "absdf";
+        String c = Character.toUpperCase(str.charAt(0)) + str.substring(1);
+        System.out.println(c);
+        "鎮ㄥソ锛屾垜鏄禉浜屽尰闄㈠紶鍖荤敓锛屾偍鏄�${name}鍚楋紵杩樻槸瀹跺睘?".replaceAll("$$*variable", "AA");
+//        Pattern pattern = Pattern.compile("^(?!.*(濂絴澶ソ)).*$");
+//        Matcher matcher = pattern.matcher("鐫$湢涓嶅ソ");
+//        System.out.println(matcher.matches());
+        // 鍒涘缓鍥哄畾澶у皬鐨勭嚎绋嬫睜
+//        ExecutorService executorService = Executors.newFixedThreadPool(10);
+//
+//        executorService.submit(new PhoneTask());
     }
 }
diff --git a/ruoyi-ui/src/api/system/config.js b/ruoyi-ui/src/api/system/config.js
index a404d82..9d651fe 100644
--- a/ruoyi-ui/src/api/system/config.js
+++ b/ruoyi-ui/src/api/system/config.js
@@ -28,7 +28,7 @@
 // 鏂板鍙傛暟閰嶇疆
 export function addConfig(data) {
   return request({
-    url: '/system/config',
+    url: '/system/config/add',
     method: 'post',
     data: data
   })
@@ -37,8 +37,8 @@
 // 淇敼鍙傛暟閰嶇疆
 export function updateConfig(data) {
   return request({
-    url: '/system/config',
-    method: 'put',
+    url: '/system/config/edit',
+    method: 'post',
     data: data
   })
 }
@@ -47,7 +47,7 @@
 export function delConfig(configId) {
   return request({
     url: '/system/config/' + configId,
-    method: 'delete'
+    method: 'get'
   })
 }
 
@@ -55,6 +55,6 @@
 export function refreshCache() {
   return request({
     url: '/system/config/refreshCache',
-    method: 'delete'
+    method: 'get'
   })
 }
diff --git a/ruoyi-ui/src/api/system/dict/type.js b/ruoyi-ui/src/api/system/dict/type.js
index a7a6e01..14ab7b8 100644
--- a/ruoyi-ui/src/api/system/dict/type.js
+++ b/ruoyi-ui/src/api/system/dict/type.js
@@ -20,7 +20,7 @@
 // 鏂板瀛楀吀绫诲瀷
 export function addType(data) {
   return request({
-    url: '/system/dict/type',
+    url: '/system/dict/type/add',
     method: 'post',
     data: data
   })
@@ -29,8 +29,8 @@
 // 淇敼瀛楀吀绫诲瀷
 export function updateType(data) {
   return request({
-    url: '/system/dict/type',
-    method: 'put',
+    url: '/system/dict/type/edit',
+    method: 'post',
     data: data
   })
 }
@@ -39,7 +39,7 @@
 export function delType(dictId) {
   return request({
     url: '/system/dict/type/' + dictId,
-    method: 'delete'
+    method: 'get'
   })
 }
 
@@ -47,7 +47,7 @@
 export function refreshCache() {
   return request({
     url: '/system/dict/type/refreshCache',
-    method: 'delete'
+    method: 'get'
   })
 }
 
@@ -57,4 +57,4 @@
     url: '/system/dict/type/optionselect',
     method: 'get'
   })
-}
\ No newline at end of file
+}
diff --git a/smartor/src/main/java/com/smartor/common/SendService.java b/smartor/src/main/java/com/smartor/common/SendService.java
index 7645456..ebd853b 100644
--- a/smartor/src/main/java/com/smartor/common/SendService.java
+++ b/smartor/src/main/java/com/smartor/common/SendService.java
@@ -1,13 +1,15 @@
 package com.smartor.common;
 
 import com.aliyun.dysmsapi20170525.models.SendSmsResponseBody;
-import com.smartor.domain.BaseSmsRequest;
-import com.smartor.domain.DingTalkReqVo;
-import com.smartor.domain.SendMagParam;
+import com.smartor.domain.*;
+import com.smartor.mapper.PatWildcardMapper;
 import com.smartor.service.DingTalkService;
 import com.smartor.service.impl.BaseSmsaccountServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
+
+import java.lang.reflect.Field;
+import java.util.List;
 
 /**
  * 鍙戦�佹湇鍔″伐鍏风被
@@ -19,6 +21,9 @@
 
     @Autowired
     private DingTalkService dingTalkService;
+
+    @Autowired
+    private PatWildcardMapper patWildcardMapper;
 
     public Boolean sendMsg(SendMagParam sendMagParam) {
         switch (sendMagParam.getType()) {
@@ -57,4 +62,29 @@
         }
 
     }
+
+    /**
+     * 瀵归棶棰樹腑鐨勯�氶厤绗﹁繘琛屽尮閰�
+     *
+     * @param script
+     * @param patArchive
+     * @return
+     */
+    public String patWildcard(String script, PatArchive patArchive) {
+        List<PatWildcard> patWildcards = patWildcardMapper.selectPatWildcardList(new PatWildcard());
+        for (PatWildcard patWildcard : patWildcards) {
+            try {
+                //鑾峰彇鎮h�呭搴旂殑瀛楁鐨勫��
+                Field field = patArchive.getClass().getField(patWildcard.getPatField());
+                field.setAccessible(true);
+                String value = field.get(patArchive).toString();
+                //灏嗛棶棰樹腑鐨勯�氶厤绗﹁繘琛屾浛鎹�
+                script.replaceAll(patWildcard.getWildcard(), value);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+
+        return script;
+    }
 }
diff --git a/smartor/src/main/java/com/smartor/config/PhoneUtils.java b/smartor/src/main/java/com/smartor/config/PhoneUtils.java
index f9ae78a..07a7497 100644
--- a/smartor/src/main/java/com/smartor/config/PhoneUtils.java
+++ b/smartor/src/main/java/com/smartor/config/PhoneUtils.java
@@ -202,6 +202,7 @@
      * @return
      */
     public String ttsPlayback(String fileText, String uuid) {
+        System.out.println("=====================闂鍐呭锛�" + fileText + "UUID ; " + uuid);
         Map<String, Object> map = new HashMap<>();
         map.put("text", fileText);
         map.put("uuid", uuid);
diff --git a/smartor/src/main/java/com/smartor/domain/IvrTask.java b/smartor/src/main/java/com/smartor/domain/IvrTask.java
index 5d2a6e8..9f014bb 100644
--- a/smartor/src/main/java/com/smartor/domain/IvrTask.java
+++ b/smartor/src/main/java/com/smartor/domain/IvrTask.java
@@ -229,13 +229,13 @@
      */
     @Excel(name = " 鏄惁鍙戦�� 锛� 0 鏆傚仠鍙戦��  1 瀹氭椂鍙戦��  2 绔嬪嵆鍙戦�� ")
     @ApiModelProperty(value = "鏄惁鍙戦�� 锛� 0 鏆傚仠鍙戦��  1 瀹氭椂鍙戦��  2 绔嬪嵆鍙戦�� ")
-    private Integer isSend;
+    private Integer sendType;
 
     /**
      * 鍙戦�佺姸鎬侊細  0  澶辫触   1鎴愬姛
      */
-    @Excel(name = " 鍙戦�佺姸鎬侊細  0  澶辫触   1鎴愬姛 ")
-    @ApiModelProperty(value = "鍙戦�佺姸鎬侊細  0  澶辫触   1鎴愬姛 ")
+    @Excel(name = " 鍙戦�佺姸鎬侊細 1鍒涘缓   2鎵ц涓�   3 鏆傚仠   4缁堟  5瀹屾垚 ")
+    @ApiModelProperty(value = "鍙戦�佺姸鎬侊細 1鍒涘缓   2鎵ц涓�   3 鏆傚仠   4缁堟  5瀹屾垚 ")
     private String sendState;
 
     /**
@@ -271,5 +271,10 @@
     @ApiModelProperty(value = "灏辫瘖缂栧彿锛堝搴旂殑outhospno銆乮nhospno锛�")
     private String hospno;
 
-
+    /**
+     * 浠诲姟鎻忚堪
+     */
+    @Excel(name = "浠诲姟鎻忚堪")
+    @ApiModelProperty(value = "浠诲姟鎻忚堪")
+    private String taskDesc;
 }
diff --git a/smartor/src/main/java/com/smartor/domain/IvrTaskSingle.java b/smartor/src/main/java/com/smartor/domain/IvrTaskSingle.java
index 3ef97f7..586d06c 100644
--- a/smartor/src/main/java/com/smartor/domain/IvrTaskSingle.java
+++ b/smartor/src/main/java/com/smartor/domain/IvrTaskSingle.java
@@ -196,13 +196,6 @@
     private String username;
 
     /**
-     *
-     */
-    @Excel(name = " outbounduuid ")
-    @ApiModelProperty(value = "outbounduuid")
-    private String outbounduuid;
-
-    /**
      * 灏辫瘖璁板綍缂栧彿
      */
     @Excel(name = " 灏辫瘖璁板綍缂栧彿 ")
@@ -320,7 +313,7 @@
      */
     @Excel(name = "搴婂彿")
     @ApiModelProperty(value = "搴婂彿")
-    private String badNo;
+    private String bedNo;
 
     /**
      * 鐤剧梾鍚嶇О
diff --git a/smartor/src/main/java/com/smartor/domain/IvrTaskSingleVO.java b/smartor/src/main/java/com/smartor/domain/IvrTaskSingleVO.java
index adf02c7..8801654 100644
--- a/smartor/src/main/java/com/smartor/domain/IvrTaskSingleVO.java
+++ b/smartor/src/main/java/com/smartor/domain/IvrTaskSingleVO.java
@@ -5,8 +5,6 @@
 import com.ruoyi.common.core.domain.BaseEntity;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
 
 import java.util.Date;
 import java.util.List;
@@ -204,12 +202,6 @@
     @ApiModelProperty(value = "鐢ㄦ埛鍚�")
     private String username;
 
-    /**
-     * outbounduuid
-     */
-    @Excel(name = " outbounduuid ")
-    @ApiModelProperty(value = "outbounduuid")
-    private String outbounduuid;
 
     /**
      * 灏辫瘖璁板綍缂栧彿
@@ -352,35 +344,35 @@
     @ApiModelProperty(value = "鎮h�呬笌鍗曚竴浠诲姟鍏宠仈琛ㄩ泦鍚�")
     private List<PatTaskRelevance> patTaskRelevances;
 
-    /**
-     * 搴婂彿
-     */
-    @Excel(name = "搴婂彿")
-    @ApiModelProperty(value = "搴婂彿")
-    private Long badNo;
-
-    /**
-     * 鐤剧梾鍚嶇О
-     */
-    @Excel(name = "鐤剧梾鍚嶇О")
-    @ApiModelProperty(value = "鐤剧梾鍚嶇О")
-    private String icdName;
-
-    /**
-     * 鐥呭巻鍙�
-     */
-    @Excel(name = "鐥呭巻鍙�")
-    @ApiModelProperty(value = "鐥呭巻鍙�")
-    private String medicalRecordNo;
-
-    /**
-     * 瀹f暀鍐呭
-     */
-    @Excel(name = "瀹f暀鍐呭")
-    @ApiModelProperty(value = "瀹f暀鍐呭")
-    private String preachcontent;
-
-
+//    /**
+//     * 搴婂彿
+//     */
+//    @Excel(name = "搴婂彿")
+//    @ApiModelProperty(value = "搴婂彿")
+//    private Long bedNo;
+//
+//    /**
+//     * 鐤剧梾鍚嶇О
+//     */
+//    @Excel(name = "鐤剧梾鍚嶇О")
+//    @ApiModelProperty(value = "鐤剧梾鍚嶇О")
+//    private String icdName;
+//
+//    /**
+//     * 鐥呭巻鍙�
+//     */
+//    @Excel(name = "鐥呭巻鍙�")
+//    @ApiModelProperty(value = "鐥呭巻鍙�")
+//    private String medicalRecordNo;
+//
+//    /**
+//     * 瀹f暀鍐呭
+//     */
+//    @Excel(name = "瀹f暀鍐呭")
+//    @ApiModelProperty(value = "瀹f暀鍐呭")
+//    private String preachcontent;
+//
+//
     /**
      * 鍙戦�佹椂闂存
      */
@@ -401,75 +393,69 @@
     @ApiModelProperty(value = "浠诲姟鎻忚堪")
     private String taskDesc;
 
-
-    /**
-     * 闅忚浜�
-     */
-    @Excel(name = "  闅忚浜�  ")
-    @ApiModelProperty(value = "闅忚浜�")
-    private String operator;
-
-    /**
-     * 闅忚浜�
-     */
-    @Excel(name = "  闅忚浜虹紪鍙�  ")
-    @ApiModelProperty(value = "闅忚浜虹紪鍙�")
-    private String operatorNo;
-
-
-    /**
-     * 灏辫瘖缂栧彿锛堝搴旂殑outhospno銆乮nhospno锛�
-     */
-    @Excel(name = "  灏辫瘖缂栧彿锛堝搴旂殑outhospno銆乮nhospno锛�  ")
-    @ApiModelProperty(value = "灏辫瘖缂栧彿锛堝搴旂殑outhospno銆乮nhospno锛�")
-    private String hospno;
-
-    /**
-     * 灏辫瘖绫诲瀷锛�1闂ㄨ瘖  2鍑洪櫌锛�
-     */
-    @Excel(name = "  灏辫瘖绫诲瀷锛�1闂ㄨ瘖  2鍑洪櫌   3.涓撶梾锛�")
-    @ApiModelProperty(value = "灏辫瘖绫诲瀷锛�1闂ㄨ瘖  2鍑洪櫌   3.涓撶梾锛�")
-    private String hospType;
-
-    /**
-     * 寰俊
-     */
-    @Excel(name = "  寰俊")
-    @ApiModelProperty(value = "寰俊")
-    private String wechat;
-
-
-    /**
-     * 璇婃柇鍚嶇О
-     */
-    @Excel(name = "  璇婃柇鍚嶇О")
-    @ApiModelProperty(value = "璇婃柇鍚嶇О")
-    private String diagname;
-
-    /**
-     * 绉戝鍚嶇О
-     */
-    @Excel(name = "绉戝鍚嶇О")
-    @ApiModelProperty(value = "绉戝鍚嶇О")
-    private String deptname;
-
-    /**
-     * 灏辫瘖鏃ユ湡
-     */
-    @Excel(name = " 灏辫瘖鏃ユ湡")
-    @ApiModelProperty(value = "灏辫瘖鏃ユ湡")
-    private Date admindate;
-
-    /**
-     * 鐥呮埧鍙�
-     */
-    @Excel(name = "  鐥呮埧鍙�")
-    @ApiModelProperty(value = "鐥呮埧鍙�")
-    private String roomno;
-
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).append("id", getId()).append("sendname", getSendname()).append("phone", getPhone()).append("sex", getSex()).append("age", getAge()).append("sfzh", getSfzh()).append("addr", getAddr()).append("senderdetail", getSenderdetail()).append("type", getType()).append("taskid", getTaskid()).append("templateid", getTemplateid()).append("templatename", getTemplatename()).append("senddate", getSenddate()).append("sendlimitabegin", getSendlimitabegin()).append("sendlimitaend", getSendlimitaend()).append("sendlimitpbegin", getSendlimitpbegin()).append("sendlimitpend", getSendlimitpend()).append("sendlimitnbegin", getSendlimitnbegin()).append("sendlimitnend", getSendlimitnend()).append("sendstate", getSendstate()).append("senduuid", getSenduuid()).append("result", getResult()).append("finishtime", getFinishtime()).append("userid", getUserid()).append("username", getUsername()).append("outbounduuid", getOutbounduuid()).append("recordid", getRecordid()).append("recallcount", getRecallcount()).append("exrecallcount", getExrecallcount()).append("pulltime", getPulltime()).append("bqsms", getBqsms()).append("bhsms", getBhsms()).append("deptcode", getDeptcode()).append("labelstatus", getLabelstatus()).append("delFlag", getDelFlag()).append("updateBy", getUpdateBy()).append("updateTime", getUpdateTime()).append("createBy", getCreateBy()).append("createTime", getCreateTime()).append("isupload", getIsupload()).append("uploadTime", getUploadTime()).append("orgid", getOrgid()).append("pid", getPid()).append("guid", getGuid()).append("textParam", getTextParam()).toString();
-    }
+//
+//    /**
+//     * 闅忚浜�
+//     */
+//    @Excel(name = "  闅忚浜�  ")
+//    @ApiModelProperty(value = "闅忚浜�")
+//    private String operator;
+//
+//    /**
+//     * 闅忚浜�
+//     */
+//    @Excel(name = "  闅忚浜虹紪鍙�  ")
+//    @ApiModelProperty(value = "闅忚浜虹紪鍙�")
+//    private String operatorNo;
+//
+//
+//    /**
+//     * 灏辫瘖缂栧彿锛堝搴旂殑outhospno銆乮nhospno锛�
+//     */
+//    @Excel(name = "  灏辫瘖缂栧彿锛堝搴旂殑outhospno銆乮nhospno锛�  ")
+//    @ApiModelProperty(value = "灏辫瘖缂栧彿锛堝搴旂殑outhospno銆乮nhospno锛�")
+//    private String hospno;
+//
+//    /**
+//     * 灏辫瘖绫诲瀷锛�1闂ㄨ瘖  2鍑洪櫌锛�
+//     */
+//    @Excel(name = "  灏辫瘖绫诲瀷锛�1闂ㄨ瘖  2鍑洪櫌   3.涓撶梾锛�")
+//    @ApiModelProperty(value = "灏辫瘖绫诲瀷锛�1闂ㄨ瘖  2鍑洪櫌   3.涓撶梾锛�")
+//    private String hospType;
+//
+//    /**
+//     * 寰俊
+//     */
+//    @Excel(name = "  寰俊")
+//    @ApiModelProperty(value = "寰俊")
+//    private String wechat;
+//
+//
+//    /**
+//     * 璇婃柇鍚嶇О
+//     */
+//    @Excel(name = "  璇婃柇鍚嶇О")
+//    @ApiModelProperty(value = "璇婃柇鍚嶇О")
+//    private String diagname;
+//
+//    /**
+//     * 绉戝鍚嶇О
+//     */
+//    @Excel(name = "绉戝鍚嶇О")
+//    @ApiModelProperty(value = "绉戝鍚嶇О")
+//    private String deptname;
+//
+//    /**
+//     * 灏辫瘖鏃ユ湡
+//     */
+//    @Excel(name = " 灏辫瘖鏃ユ湡")
+//    @ApiModelProperty(value = "灏辫瘖鏃ユ湡")
+//    private Date admindate;
+//
+//    /**
+//     * 鐥呮埧鍙�
+//     */
+//    @Excel(name = "  鐥呮埧鍙�")
+//    @ApiModelProperty(value = "鐥呮埧鍙�")
+//    private String roomno;
 }
diff --git a/smartor/src/main/java/com/smartor/domain/IvrTaskVO.java b/smartor/src/main/java/com/smartor/domain/IvrTaskVO.java
index 4a90bd2..385927d 100644
--- a/smartor/src/main/java/com/smartor/domain/IvrTaskVO.java
+++ b/smartor/src/main/java/com/smartor/domain/IvrTaskVO.java
@@ -21,6 +21,13 @@
     private static final long serialVersionUID = 1L;
 
     /**
+     * 浠诲姟鎻忚堪
+     */
+    @Excel(name = "浠诲姟鎻忚堪")
+    @ApiModelProperty(value = "浠诲姟鎻忚堪")
+    private String taskDesc;
+
+    /**
      *
      */
     private Long taskid;
@@ -29,7 +36,7 @@
      *
      */
     @Excel(name = "  ")
-    private String taskname;
+    private String taskName;
 
     /**
      *
diff --git a/smartor/src/main/java/com/smartor/domain/PatArchive.java b/smartor/src/main/java/com/smartor/domain/PatArchive.java
index d169c2c..fbfa3e8 100644
--- a/smartor/src/main/java/com/smartor/domain/PatArchive.java
+++ b/smartor/src/main/java/com/smartor/domain/PatArchive.java
@@ -111,7 +111,7 @@
      */
     @ApiModelProperty("鏉ユ簮")
     @Excel(name = " 鏉ユ簮 ")
-    private Long source;
+    private Long sourcefrom;
 
     /**
      * 寤烘。鏃堕棿
@@ -232,10 +232,10 @@
      */
     @ApiModelProperty("浼氬憳灞炴��:0闈炰細鍛橈紝1涓�鑸細鍛樸��2閲嶈浼氬憳")
     @Excel(name = " 浼氬憳灞炴��:0闈炰細鍛橈紝1涓�鑸細鍛樸��2閲嶈浼氬憳 ")
-    private String membertype;
+    private String viptype;
 
     @Override
     public String toString() {
-        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).append("patid", getPatid()).append("name", getName()).append("sex", getSex()).append("idcardno", getIdcardno()).append("birthdate", getBirthdate()).append("age", getAge()).append("source", getSource()).append("archivetime", getArchivetime()).append("archiveby", getArchiveby()).append("telcode", getTelcode()).append("relativetelcode", getRelativetelcode()).append("idcardtype", getIdcardtype()).append("orgid", getOrgid()).append("openid", getOpenid()).append("delFlag", getDelFlag()).append("updateBy", getUpdateBy()).append("updateTime", getUpdateTime()).append("createBy", getCreateBy()).append("createTime", getCreateTime()).append("isupload", getIsupload()).append("uploadTime", getUploadTime()).toString();
+        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).append("patid", getPatid()).append("name", getName()).append("sex", getSex()).append("idcardno", getIdcardno()).append("birthdate", getBirthdate()).append("age", getAge()).append("sourcefrom", getSourcefrom()).append("archivetime", getArchivetime()).append("archiveby", getArchiveby()).append("telcode", getTelcode()).append("relativetelcode", getRelativetelcode()).append("idcardtype", getIdcardtype()).append("orgid", getOrgid()).append("openid", getOpenid()).append("delFlag", getDelFlag()).append("updateBy", getUpdateBy()).append("updateTime", getUpdateTime()).append("createBy", getCreateBy()).append("createTime", getCreateTime()).append("isupload", getIsupload()).append("uploadTime", getUploadTime()).toString();
     }
 }
diff --git a/smartor/src/main/java/com/smartor/domain/PatArchiveVO.java b/smartor/src/main/java/com/smartor/domain/PatArchiveVO.java
index ce3fbff..b6e8c91 100644
--- a/smartor/src/main/java/com/smartor/domain/PatArchiveVO.java
+++ b/smartor/src/main/java/com/smartor/domain/PatArchiveVO.java
@@ -71,7 +71,7 @@
      */
     @ApiModelProperty("鏉ユ簮")
     @Excel(name = " 鏉ユ簮 ")
-    private Long source;
+    private Long sourcefrom;
 
     /**
      * 寤烘。鏃堕棿
@@ -147,8 +147,4 @@
     @ApiModelProperty(value = "鏄惁瀛樺湪鎿嶄綔锛�1 鏂板 2淇敼 3鍒犻櫎")
     private Integer isoperation;
 
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).append("patid", getPatid()).append("name", getName()).append("sex", getSex()).append("iccardno", getIdcardno()).append("birthdate", getBirthdate()).append("age", getAge()).append("source", getSource()).append("archivetime", getArchivetime()).append("archiveby", getArchiveby()).append("telcode", getTelcode()).append("relativetelcode", getRelativetelcode()).append("iccardtype", getIdcardtype()).append("orgid", getOrgid()).append("openid", getOpenid()).append("delFlag", getDelFlag()).append("updateBy", getUpdateBy()).append("updateTime", getUpdateTime()).append("createBy", getCreateBy()).append("createTime", getCreateTime()).append("isupload", getIsupload()).append("uploadTime", getUploadTime()).toString();
-    }
 }
diff --git a/smartor/src/main/java/com/smartor/domain/PatTaskRelevance.java b/smartor/src/main/java/com/smartor/domain/PatTaskRelevance.java
index 40a3c2e..e60f263 100644
--- a/smartor/src/main/java/com/smartor/domain/PatTaskRelevance.java
+++ b/smartor/src/main/java/com/smartor/domain/PatTaskRelevance.java
@@ -183,4 +183,11 @@
     @ApiModelProperty(value = "鐥呮埧鍙�")
     private String roomno;
 
+    /**
+     * 鏂囨湰鍙橀噺鍙傛暟
+     */
+    @Excel(name = "鏂囨湰鍙橀噺鍙傛暟")
+    @ApiModelProperty(value = "鏂囨湰鍙橀噺鍙傛暟")
+    private String textParam;
+
 }
diff --git a/smartor/src/main/java/com/smartor/domain/PatWildcard.java b/smartor/src/main/java/com/smartor/domain/PatWildcard.java
new file mode 100644
index 0000000..0a73253
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/domain/PatWildcard.java
@@ -0,0 +1,48 @@
+package com.smartor.domain;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 鎮h�呬俊鎭�氶厤绗﹀璞� pat_wildcard
+ *
+ * @author ruoyi
+ * @date 2024-05-09
+ */
+@ApiModel(value = "PatWildcard", description = "鎮h�呬俊鎭�氶厤绗﹀璞�")
+@Data
+public class PatWildcard extends BaseEntity {
+
+    /**
+     * 鑷ID
+     */
+    @ApiModelProperty(value = "鑷ID")
+    private Long id;
+
+    /**
+     * 閫氶厤绗�
+     */
+    @Excel(name = "閫氶厤绗�")
+    @ApiModelProperty(value = "閫氶厤绗�")
+    private String wildcard;
+
+    /**
+     * 鎮h�呭搴旂殑瀛楁
+     */
+    @Excel(name = "鎮h�呭搴旂殑瀛楁")
+    @ApiModelProperty(value = "鎮h�呭搴旂殑瀛楁")
+    private String patField;
+
+    /**
+     * 鍒犻櫎鏍囪
+     */
+    @ApiModelProperty(value = "鍒犻櫎鏍囪")
+    private String delFlag;
+
+
+}
diff --git a/smartor/src/main/java/com/smartor/mapper/IvrTaskMapper.java b/smartor/src/main/java/com/smartor/mapper/IvrTaskMapper.java
index 32ab20e..8320b14 100644
--- a/smartor/src/main/java/com/smartor/mapper/IvrTaskMapper.java
+++ b/smartor/src/main/java/com/smartor/mapper/IvrTaskMapper.java
@@ -2,6 +2,7 @@
 
 import java.util.List;
 import com.smartor.domain.IvrTask;
+import org.apache.ibatis.annotations.Mapper;
 
 /**
  * 璇煶浠诲姟Mapper鎺ュ彛
@@ -9,6 +10,7 @@
  * @author smartor
  * @date 2023-03-24
  */
+@Mapper
 public interface IvrTaskMapper
 {
     /**
diff --git a/smartor/src/main/java/com/smartor/mapper/PatWildcardMapper.java b/smartor/src/main/java/com/smartor/mapper/PatWildcardMapper.java
new file mode 100644
index 0000000..8475ec6
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/mapper/PatWildcardMapper.java
@@ -0,0 +1,63 @@
+package com.smartor.mapper;
+
+import com.smartor.domain.PatWildcard;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * 鎮h�呬俊鎭�氶厤绗apper鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2024-05-09
+ */
+@Mapper
+public interface PatWildcardMapper {
+    /**
+     * 鏌ヨ鎮h�呬俊鎭�氶厤绗�
+     *
+     * @param id 鎮h�呬俊鎭�氶厤绗︿富閿�
+     * @return 鎮h�呬俊鎭�氶厤绗�
+     */
+    public PatWildcard selectPatWildcardById(Long id);
+
+    /**
+     * 鏌ヨ鎮h�呬俊鎭�氶厤绗﹀垪琛�
+     *
+     * @param patWildcard 鎮h�呬俊鎭�氶厤绗�
+     * @return 鎮h�呬俊鎭�氶厤绗﹂泦鍚�
+     */
+    public List<PatWildcard> selectPatWildcardList(PatWildcard patWildcard);
+
+    /**
+     * 鏂板鎮h�呬俊鎭�氶厤绗�
+     *
+     * @param patWildcard 鎮h�呬俊鎭�氶厤绗�
+     * @return 缁撴灉
+     */
+    public int insertPatWildcard(PatWildcard patWildcard);
+
+    /**
+     * 淇敼鎮h�呬俊鎭�氶厤绗�
+     *
+     * @param patWildcard 鎮h�呬俊鎭�氶厤绗�
+     * @return 缁撴灉
+     */
+    public int updatePatWildcard(PatWildcard patWildcard);
+
+    /**
+     * 鍒犻櫎鎮h�呬俊鎭�氶厤绗�
+     *
+     * @param id 鎮h�呬俊鎭�氶厤绗︿富閿�
+     * @return 缁撴灉
+     */
+    public int deletePatWildcardById(Long id);
+
+    /**
+     * 鎵归噺鍒犻櫎鎮h�呬俊鎭�氶厤绗�
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deletePatWildcardByIds(Long[] ids);
+}
diff --git a/smartor/src/main/java/com/smartor/service/IPatWildcardService.java b/smartor/src/main/java/com/smartor/service/IPatWildcardService.java
new file mode 100644
index 0000000..210660f
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/service/IPatWildcardService.java
@@ -0,0 +1,62 @@
+package com.smartor.service;
+
+import com.smartor.domain.PatWildcard;
+
+import java.util.List;
+
+/**
+ * 鎮h�呬俊鎭�氶厤绗ervice鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2024-05-09
+ */
+public interface IPatWildcardService
+{
+    /**
+     * 鏌ヨ鎮h�呬俊鎭�氶厤绗�
+     *
+     * @param id 鎮h�呬俊鎭�氶厤绗︿富閿�
+     * @return 鎮h�呬俊鎭�氶厤绗�
+     */
+    public PatWildcard selectPatWildcardById(Long id);
+
+    /**
+     * 鏌ヨ鎮h�呬俊鎭�氶厤绗﹀垪琛�
+     *
+     * @param patWildcard 鎮h�呬俊鎭�氶厤绗�
+     * @return 鎮h�呬俊鎭�氶厤绗﹂泦鍚�
+     */
+    public List<PatWildcard> selectPatWildcardList(PatWildcard patWildcard);
+
+    /**
+     * 鏂板鎮h�呬俊鎭�氶厤绗�
+     *
+     * @param patWildcard 鎮h�呬俊鎭�氶厤绗�
+     * @return 缁撴灉
+     */
+    public int insertPatWildcard(PatWildcard patWildcard);
+
+    /**
+     * 淇敼鎮h�呬俊鎭�氶厤绗�
+     *
+     * @param patWildcard 鎮h�呬俊鎭�氶厤绗�
+     * @return 缁撴灉
+     */
+    public int updatePatWildcard(PatWildcard patWildcard);
+
+    /**
+     * 鎵归噺鍒犻櫎鎮h�呬俊鎭�氶厤绗�
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑鎮h�呬俊鎭�氶厤绗︿富閿泦鍚�
+     * @return 缁撴灉
+     */
+    public int deletePatWildcardByIds(Long[] ids);
+
+    /**
+     * 鍒犻櫎鎮h�呬俊鎭�氶厤绗︿俊鎭�
+     *
+     * @param id 鎮h�呬俊鎭�氶厤绗︿富閿�
+     * @return 缁撴灉
+     */
+    public int deletePatWildcardById(Long id);
+}
diff --git a/smartor/src/main/java/com/smartor/service/impl/IvrLibaTargetServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/IvrLibaTargetServiceImpl.java
index d851abe..8262bf3 100644
--- a/smartor/src/main/java/com/smartor/service/impl/IvrLibaTargetServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/IvrLibaTargetServiceImpl.java
@@ -237,7 +237,7 @@
                 matcher2 = pattern2.matcher(ivrLibaTargetVO.getContent());
             }
             if (StringUtils.isNotEmpty(ivrLibaTargetoption.getTargetregex2()) && matcher2.matches() && StringUtils.isNotEmpty(ivrLibaTargetoption.getTargetregex()) && matcher.matches() || StringUtils.isEmpty(ivrLibaTargetoption.getTargetregex2()) && StringUtils.isNotEmpty(ivrLibaTargetoption.getTargetregex()) && matcher.matches()) {
-                return ivrLibaTargetoption.getOptiondesc();
+                return ivrLibaTargetoption.getTargetvalue();
             }
 
         }
diff --git a/smartor/src/main/java/com/smartor/service/impl/IvrTaskSingleServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/IvrTaskSingleServiceImpl.java
index 1d5c720..5a9142d 100644
--- a/smartor/src/main/java/com/smartor/service/impl/IvrTaskSingleServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/IvrTaskSingleServiceImpl.java
@@ -4,6 +4,8 @@
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.gson.Gson;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.domain.model.LoginUser;
 import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.exception.base.BaseException;
 import com.ruoyi.common.utils.DateUtils;
@@ -49,6 +51,9 @@
     private IvrLibaTemplateTargetoptionMapper ivrLibaScriptTargetoptionMapper;
 
     @Autowired
+    private IvrLibaTemplateScriptMapper ivrLibaTemplateScriptMapper;
+
+    @Autowired
     private IvrTaskVisitResultMapper ivrTaskVisitResultMapper;
 
     @Autowired
@@ -59,13 +64,6 @@
 
     @Autowired
     private RabbitTemplate rabbitTemplate;
-
-
-    @Autowired
-    private PatMedOuthospMapper patMedOuthospMapper;
-
-    @Autowired
-    private PatMedInhospMapper patMedInhospMapper;
 
 
     /**
@@ -138,7 +136,7 @@
                 patTaskRelevance.setPhone(ivrTaskcall1.getPhone());
                 patTaskRelevance.setAddr(ivrTaskcall1.getAddr());
                 patTaskRelevance.setDeptName(ivrTaskcall1.getDeptname());
-                patTaskRelevance.setBedNo(ivrTaskcall1.getBadNo());
+                patTaskRelevance.setBedNo(ivrTaskcall1.getBedNo());
                 patTaskRelevance.setDiagname(ivrTaskcall1.getDiagname());
                 patTaskRelevances.add(patTaskRelevance);
             }
@@ -209,7 +207,7 @@
         if (ivrTaskcallVO.getIsoperation() != null && ivrTaskcallVO.getIsoperation() == 1) {
             //寰�浠诲姟琛ㄤ腑锛屾柊澧炰换鍔�
             IvrTask ivrTask = DtoConversionUtils.sourceToTarget(ivrTaskcallVO, IvrTask.class);
-            Integer taskId = ivrTaskService.insertIvrTask(ivrTask);
+            ivrTaskService.insertIvrTask(ivrTask);
 
             ivrTaskcallVO.setTaskid(ivrTask.getTaskid().longValue());
             //鏂板
@@ -223,7 +221,7 @@
                     ivrTaskcall.setPhone(patTaskRelevance.getPhone());
                     ivrTaskcall.setAddr(patTaskRelevance.getAddr());
                     ivrTaskcall.setCreateTime(DateUtils.getNowDate());
-                    ivrTaskcall.setTextParam(new Gson().toJson(ivrTaskcallVO.getTextParam()));
+                    ivrTaskcall.setTextParam(new Gson().toJson(patTaskRelevance.getTextParam()));
                     if (CollectionUtils.isNotEmpty(ivrTaskcallVO.getSendTimeslot())) {
                         ivrTaskcall.setSendTimeSlot(ivrTaskcallVO.getSendTimeslot().toString());
                     }
@@ -273,7 +271,7 @@
     @Override
     public int heTaskSend(IvrTaskSingleVO ivrTaskcallVO) {
         //鍒ゆ柇浠诲姟鏄惁鏄珛鍗冲彂閫�
-        if (ivrTaskcallVO.getSendType().equals("2") && ivrTaskcallVO.getSendstate() == 1) {
+        if (ivrTaskcallVO.getSendType().equals("2")) {
             IvrTaskcallMQ ivrTaskcallMQ = new IvrTaskcallMQ();
             ivrTaskcallMQ.setTaskid(ivrTaskcallVO.getTaskid());
             ivrTaskcallMQ.setSendType("1");
@@ -287,7 +285,7 @@
                 message.getMessageProperties().setHeader("x-delay", 0);
                 return message;
             });
-        } else if (ivrTaskcallVO.getSendType().equals("1") && ivrTaskcallVO.getSendstate() == 1) {
+        } else if (ivrTaskcallVO.getSendType().equals("1")) {
             //鏃堕棿娈靛彂閫�
             if (CollectionUtils.isNotEmpty(ivrTaskcallVO.getSendTimeslot())) {
                 for (TaskSendTimeVO taskSendTimeVO : ivrTaskcallVO.getSendTimeslot()) {
@@ -322,6 +320,11 @@
                         return message;
                     });
                 }
+                //灏嗕换鍔$姸鎬佷慨鏀规垚鎵ц涓�
+                IvrTask ivrTask = new IvrTask();
+                ivrTask.setTaskid(ivrTaskcallVO.getTaskid());
+                ivrTask.setSendState("2");
+                ivrTaskService.updateIvrTask(ivrTask);
             }
         }
 
@@ -330,120 +333,168 @@
 
     @Override
     public void phoneCallBack(PhoneCallBackVO phoneCallBackVO) {
-        phoneCallBackVO.setTextResult(phoneCallBackVO.getTextResult().substring(0, phoneCallBackVO.getTextResult().length() - 1));
+        synchronized (new IvrTaskSingleServiceImpl()) {
+            phoneCallBackVO.setTextResult(phoneCallBackVO.getTextResult().substring(0, phoneCallBackVO.getTextResult().length() - 1));
+            SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
 
-        //鑾峰彇鏁版嵁
-        Boolean aBoolean = redisCache.hasKey(phoneCallBackVO.getUuid());
-        if (!aBoolean) {
-            throw new BaseException("璇uid涓嶅瓨鍦�");
-        }
-        Integer hangupValue = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "hangup");
-        PhoneUtils phoneUtils = new PhoneUtils();
-        if (hangupValue != null && hangupValue == 1) {
-            log.info("鐢佃瘽瑕佹寕鏂簡");
-            //hangupValue == 1  闅忚缁撴潫锛岀洿鎺ュ彲浠ユ寕鐢佃瘽
-            phoneUtils.hangup("", "", "", "", "", "", "", phoneCallBackVO.getUuid());
-            return;
-        }
-
-        Map<String, Object> map = redisCache.getCacheObject(phoneCallBackVO.getUuid());
-        IvrTaskSingle ivrTaskcall = (IvrTaskSingle) map.get("ivrTaskcall");
-        List<IvrLibaTemplateScriptVO> ivrLibaTemplateScriptVOs = (List<IvrLibaTemplateScriptVO>) map.get("ivrLibaTemplateScriptVO");
-        //灏唘uid鏇存柊鍒版暟鎹簱涓�
-        ivrTaskcall.setSenduuid(phoneCallBackVO.getUuid());
-        ivrTaskSingleMapper.updateIvrTaskcall(ivrTaskcall);
-
-        //鑾峰彇妯℃澘淇℃伅
-        IvrLibaTemplateVO ivrLibaTemplateVO = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "ivrLibaTemplateVO");
-
-        //璇煶璇嗗埆缁撴灉涓婃姤鎺ュ彛: 3
-        Integer noVoice = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "noVoice");
-        QuestionMessage returnQues = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "returnQues");
-        //灏嗕紶鍥炵殑缁撴灉鏀惧埌鍥炲瀵硅薄涓�
-        returnQues.setContent(phoneCallBackVO.getTextResult());
-
-        IvrLibaTemplateScriptVO nowQuestion = returnQues.getNowQuestion();
-
-        if (StringUtils.isEmpty(returnQues.getContent())) {
-            //鏃犲洖璇�
-            //鍒ゆ柇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());
-                    return;
-                } 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());
+            //鑾峰彇鏁版嵁
+            Boolean aBoolean = redisCache.hasKey(phoneCallBackVO.getUuid());
+            if (!aBoolean) {
+                throw new BaseException("璇uid涓嶅瓨鍦�");
+            }
+            Integer hangupValue = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "hangup");
+            PhoneUtils phoneUtils = new PhoneUtils();
+            if (hangupValue != null && hangupValue == 1) {
+                String date = simpleDateFormat1.format(new Date());
+                log.info("鐢佃瘽瑕佹寕鏂簡: {}", date);
+                //hangupValue == 1  闅忚缁撴潫锛岀洿鎺ュ彲浠ユ寕鐢佃瘽
+                phoneUtils.hangup("", "", "", "", "", "", "", phoneCallBackVO.getUuid());
                 return;
             }
 
-        } else {
-            //isppd鐢ㄦ潵璁板綍鏄惁鍖归厤鍒�
-            Boolean isppd = false;
-            //鏈夊洖璇濓紝瀵瑰洖绛旂殑闂,杩涜姝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());
+            Map<String, Object> map = redisCache.getCacheObject(phoneCallBackVO.getUuid());
+            IvrTaskSingle ivrTaskcall = (IvrTaskSingle) map.get("ivrTaskSingle");
+            List<IvrLibaTemplateScriptVO> ivrLibaTemplateScriptVOs = (List<IvrLibaTemplateScriptVO>) map.get("ivrLibaTemplateScriptVO");
+            //灏唘uid鏇存柊鍒版暟鎹簱涓�
+            ivrTaskcall.setSenduuid(phoneCallBackVO.getUuid());
+            ivrTaskSingleMapper.updateIvrTaskcall(ivrTaskcall);
+
+            //鑾峰彇妯℃澘淇℃伅
+            IvrLibaTemplateVO ivrLibaTemplateVO = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "ivrLibaTemplateVO");
+
+            //璇煶璇嗗埆缁撴灉涓婃姤鎺ュ彛: 3
+            Integer noVoice = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "noVoice");
+            QuestionMessage returnQues = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "returnQues");
+            //灏嗕紶鍥炵殑缁撴灉鏀惧埌鍥炲瀵硅薄涓�
+            returnQues.setContent(phoneCallBackVO.getTextResult());
+
+            IvrLibaTemplateScriptVO nowQuestion = returnQues.getNowQuestion();
+
+            if (StringUtils.isEmpty(returnQues.getContent())) {
+                //鏃犲洖璇�
+                //鍒ゆ柇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());
+                        return;
+                    } else {
+                        //鏈変笅涓�棰�
+                        redisCache.setCacheObject(phoneCallBackVO.getUuid() + "noVoice", 0, 120, TimeUnit.MINUTES);
+                        IvrLibaTemplateScriptVO nextQuestion = getNextQuestion(ivrLibaTemplateScriptVOs, nowQuestion);
+                        // 闂锛�  鍘昏皟鐢ㄢ�渢ts鍚堟垚鍜屾挱鏀锯�濇帴鍙�
+                        String date = simpleDateFormat1.format(new Date());
+                        log.info("鍘昏皟鐢╰ts鍚堟垚鍜屾挱鏀炬帴鍙�: {},uuid涓猴細{}", date, phoneCallBackVO.getUuid());
+                        phoneUtils.ttsPlayback(nowQuestion.getQuestionText(), phoneCallBackVO.getUuid());
+                    }
+                } else {
+                    redisCache.setCacheObject(phoneCallBackVO.getUuid() + "noVoice", noVoice + 1, 120, TimeUnit.MINUTES);
+                    //璋冪敤ivrLibaTemplateScriptVO涓殑slienceText(闈欓粯璇濇湳)
+                    String slienceText = nowQuestion.getSlienceText();
+                    //闈欓粯璇濇湳  + 闂锛�  鍘昏皟鐢ㄢ�渢ts鍚堟垚鍜屾挱鏀锯�濇帴鍙�
+                    String date = simpleDateFormat1.format(new Date());
+                    log.info("闈欓粯璇濇湳  + 闂,鍘昏皟鐢╰ts鍚堟垚鍜屾挱鏀炬帴鍙�: {},uuid涓猴細{}", date, phoneCallBackVO.getUuid());
+                    phoneUtils.ttsPlayback(slienceText + nowQuestion.getQuestionText(), phoneCallBackVO.getUuid());
+                    return;
                 }
-                //涓嶅寘鍚�
-                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());
+
+            } else {
+                //isppd鐢ㄦ潵璁板綍鏄惁鍖归厤鍒�
+                Boolean isppd = false;
+                //鏈夊洖璇濓紝瀵瑰洖绛旂殑闂,杩涜姝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.error("PCB--getQuestionText闂涓猴細{},UUID锛歿}", nowQuestion.getQuestionText(), phoneCallBackVO.getUuid());
+                    if (StringUtils.isNotEmpty(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex2()) && matcher2.matches() && StringUtils.isNotEmpty(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex()) && matcher.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);
+
+                        //灏嗘偅鑰呯殑鍥炵鍐欒繘琛ㄩ噷
+                        IvrTaskVisitResult ivrTaskVisitResult = DtoConversionUtils.sourceToTarget(ivrTaskcall, IvrTaskVisitResult.class);
+                        ivrTaskVisitResult.setId(null);
+                        ivrTaskVisitResult.setQuestion(nowQuestion.getQuestionText());
+                        ivrTaskVisitResult.setPatientAnswer(phoneCallBackVO.getTextResult());
+                        ivrTaskVisitResult.setCreateTime(new Date());
+                        ivrTaskVisitResult.setOptionResult(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetvalue());
+                        ivrTaskVisitResultMapper.insertIvrTaskVisitResult(ivrTaskVisitResult);
+
+                        //灏嗗尮閰嶅埌鐨勬爣璇嗘敼鎴恡rue
+                        isppd = true;
+
+                        //鑾峰彇涓嬩竴棰�
+                        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);
+                                phoneUtils.ttsPlayback(script.getQuestionText(), phoneCallBackVO.getUuid());
+                                return;
+                            } else if (nextQuestion > ivrLibaTemplateScriptVOs.size()) {
+                                //娌℃湁涓嬩竴棰樹簡锛屽氨缁撴潫浜�
+                                String date = simpleDateFormat1.format(new Date());
+                                log.error("娌℃湁涓嬩竴棰樹簡锛屽氨缁撴潫浜�: {},uuid涓猴細{}", date, phoneCallBackVO.getUuid());
+                                redisCache.setCacheObject(phoneCallBackVO.getUuid() + "hangup", 1, 120, TimeUnit.MINUTES);
+                                phoneUtils.ttsPlayback(ivrLibaTemplateVO.getRevisitAfter(), phoneCallBackVO.getUuid());
+                                try {
+                                    Thread.sleep(3000);
+                                } catch (InterruptedException e) {
+                                    e.printStackTrace();
+                                }
+                                phoneUtils.hangup("", "", ivrLibaTemplateVO.getRevisitAfter(), "", "", "", "", phoneCallBackVO.getUuid());
+                                return;
+                            }
+                        }
+                        return;
+                    } else {
+                        //娌℃湁鍖归厤涓婂綋鍓峯ption
+                        //Targetregex2 涓篺alse锛岃〃绀哄湪Targetregex2涓瓨鍦�  璇彞涓殑鍏抽敭瀛楋紝杩欎釜option灏变笉鐢ㄥ啀缁х画鍖归厤浜嗭紝鐩存帴鍖归厤涓嬩竴涓猳ption
+                        continue;
+                    }
                 }
-                log.info("phoneCallBack--Targetregex鐨勫�间负锛歿}, phoneCallBack--Targetregex2鐨勫�间负锛歿}", nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex(), nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex2());
-                if (StringUtils.isNotEmpty(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex2()) && matcher2.matches() && StringUtils.isNotEmpty(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex()) && matcher.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);
-
-                    //灏嗘偅鑰呯殑鍥炵鍐欒繘琛ㄩ噷
-                    IvrTaskVisitResult ivrTaskVisitResult = DtoConversionUtils.sourceToTarget(ivrTaskcall, IvrTaskVisitResult.class);
-                    ivrTaskVisitResult.setId(null);
-                    ivrTaskVisitResult.setQuestion(nowQuestion.getQuestionText());
-                    ivrTaskVisitResult.setPatientAnswer(phoneCallBackVO.getTextResult());
-                    ivrTaskVisitResult.setCreateTime(new Date());
-                    ivrTaskVisitResult.setOptionResult(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetvalue());
-                    ivrTaskVisitResultMapper.insertIvrTaskVisitResult(ivrTaskVisitResult);
-
-                    //灏嗗尮閰嶅埌鐨勬爣璇嗘敼鎴恡rue
-                    isppd = true;
-
-                    //鑾峰彇涓嬩竴棰�
-                    Integer nextQuestion = nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getNextQuestion();
-                    for (IvrLibaTemplateScriptVO script : ivrLibaTemplateScriptVOs) {
-                        if (script.getTargetid() == nextQuestion) {
+                if (isppd != true) {
+                    //娌℃湁鍖归厤鍒�
+                    Integer mateNum = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "mateNum");
+                    if (mateNum == null) mateNum = 0;
+                    //鏃犲尮閰嶆鏁板幓鍒ゆ柇鏄惁鍒版渶澶ц闂鏁帮紝骞朵笖鎵�鏈夌殑閫夐」閮藉尮閰嶅畬浜�
+                    if (mateNum == ivrLibaTemplateVO.getMateNum().intValue()) {
+                        //濡傛灉涓嬩竴棰樹负绌�.鍒欐柊鐨勬暟鎹繑鍥�,骞跺姞涓婃劅璋㈣
+                        if (nowQuestion.getTargetid() < ivrLibaTemplateScriptVOs.size()) {
                             QuestionMessage questionMessage = new QuestionMessage();
-                            questionMessage.setNowQuestion(script);
+                            IvrLibaTemplateScriptVO nextQuestion = getNextQuestion(ivrLibaTemplateScriptVOs, nowQuestion);
                             questionMessage.setQuestionList(ivrLibaTemplateScriptVOs);
+                            questionMessage.setNowQuestion(nextQuestion);
                             redisCache.setCacheObject(phoneCallBackVO.getUuid() + "returnQues", questionMessage, 120, TimeUnit.MINUTES);
-                            phoneUtils.ttsPlayback(script.getQuestionText(), phoneCallBackVO.getUuid());
+                            redisCache.setCacheObject(phoneCallBackVO.getUuid() + "mateNum", 0, 120, TimeUnit.MINUTES);
+                            String date = simpleDateFormat1.format(new Date());
+                            log.info("濡傛灉涓嬩竴棰樹负绌�.鍒欐柊鐨勬暟鎹繑鍥�,骞跺姞涓婃劅璋㈣: {},uuid涓猴細{}", date, phoneCallBackVO.getUuid());
+                            phoneUtils.ttsPlayback(nextQuestion.getQuestionText(), phoneCallBackVO.getUuid());
                             return;
-                        } else if (nextQuestion > ivrLibaTemplateScriptVOs.size()) {
-                            //娌℃湁涓嬩竴棰樹簡锛屽氨缁撴潫浜�
+                        } else {
+                            //灏卞彲浠ユ寕鏂數璇濅簡
+                            String date = simpleDateFormat1.format(new Date());
+                            log.info("灏卞彲浠ユ寕鏂數璇濅簡------: {},uuid涓猴細{}", date, phoneCallBackVO.getUuid());
                             redisCache.setCacheObject(phoneCallBackVO.getUuid() + "hangup", 1, 120, TimeUnit.MINUTES);
                             phoneUtils.ttsPlayback(ivrLibaTemplateVO.getRevisitAfter(), phoneCallBackVO.getUuid());
                             try {
@@ -454,94 +505,62 @@
                             phoneUtils.hangup("", "", ivrLibaTemplateVO.getRevisitAfter(), "", "", "", "", phoneCallBackVO.getUuid());
                             return;
                         }
+                    } else if (mateNum < ivrLibaTemplateVO.getMateNum().intValue()) {
+                        //娌℃湁闂埌瑙勫畾娆℃暟
+                        mateNum = mateNum + 1;
+                        redisCache.setCacheObject(phoneCallBackVO.getUuid() + "mateNum", mateNum, 120, TimeUnit.MINUTES);
                     }
-                    return;
-                } else {
-                    //娌℃湁鍖归厤涓婂綋鍓峯ption
-                    //Targetregex2 涓篺alse锛岃〃绀哄湪Targetregex2涓瓨鍦�  璇彞涓殑鍏抽敭瀛楋紝杩欎釜option灏变笉鐢ㄥ啀缁х画鍖归厤浜嗭紝鐩存帴鍖归厤涓嬩竴涓猳ption
-                    continue;
                 }
-            }
-
-            if (isppd != true) {
-                //娌℃湁鍖归厤鍒�
-                Integer mateNum = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "mateNum");
-                if (mateNum == null) mateNum = 0;
-                //鏃犲尮閰嶆鏁板幓鍒ゆ柇鏄惁鍒版渶澶ц闂鏁帮紝骞朵笖鎵�鏈夌殑閫夐」閮藉尮閰嶅畬浜�
-                if (mateNum == ivrLibaTemplateVO.getMateNum().intValue()) {
-                    //濡傛灉涓嬩竴棰樹负绌�.鍒欐柊鐨勬暟鎹繑鍥�,骞跺姞涓婃劅璋㈣
-                    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);
-                        phoneUtils.ttsPlayback(nextQuestion.getQuestionText(), phoneCallBackVO.getUuid());
-                        return;
-                    } else {
-                        //灏卞彲浠ユ寕鏂數璇濅簡
-                        redisCache.setCacheObject(phoneCallBackVO.getUuid() + "hangup", 1, 120, TimeUnit.MINUTES);
-                        phoneUtils.ttsPlayback(ivrLibaTemplateVO.getRevisitAfter(), phoneCallBackVO.getUuid());
-                        try {
-                            Thread.sleep(3000);
-                        } catch (InterruptedException e) {
-                            e.printStackTrace();
+                //閫夐」鍖归厤瀹屾垚鍚庯紝闇�瑕佸啀鍘婚�氳繃搴撳啀杩涜鍖归厤涓�娆�
+                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());
                         }
-                        phoneUtils.hangup("", "", ivrLibaTemplateVO.getRevisitAfter(), "", "", "", "", phoneCallBackVO.getUuid());
-                        return;
-                    }
-                } else if (mateNum < ivrLibaTemplateVO.getMateNum().intValue()) {
-                    //娌℃湁闂埌瑙勫畾娆℃暟
-                    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);
+                        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);
+                                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.getQuestionText() + ivrLibaTemplateScriptVO.getSubmoduleText(), phoneCallBackVO.getUuid());
                         }
-                        //璋冪敤鈥�15銆乼ts鍚堟垚鍜屾挱鏀撅紝 tts_playback鈥濆皢缁撴灉浼犲洖
-                        phoneUtils.ttsPlayback(nowQuestion.getQuestionText() + ivrLibaTemplateScriptVO.getSubmoduleText(), phoneCallBackVO.getUuid());
+                        break;
                     }
-                    break;
+                    String date = simpleDateFormat1.format(new Date());
+                    log.info("鏈�鍚庣殑淇℃伅鍥炲-: {},uuid涓猴細{}", date, phoneCallBackVO.getUuid());
+                    phoneUtils.ttsPlayback(nowQuestion.getQuestionText(), phoneCallBackVO.getUuid());
                 }
-                phoneUtils.ttsPlayback(nowQuestion.getQuestionText(), phoneCallBackVO.getUuid());
             }
         }
     }
diff --git a/smartor/src/main/java/com/smartor/service/impl/PatWildcardServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/PatWildcardServiceImpl.java
new file mode 100644
index 0000000..0893d06
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/service/impl/PatWildcardServiceImpl.java
@@ -0,0 +1,90 @@
+package com.smartor.service.impl;
+
+import com.ruoyi.common.utils.DateUtils;
+import com.smartor.domain.PatWildcard;
+import com.smartor.mapper.PatWildcardMapper;
+import com.smartor.service.IPatWildcardService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 鎮h�呬俊鎭�氶厤绗ervice涓氬姟灞傚鐞�
+ *
+ * @author ruoyi
+ * @date 2024-05-09
+ */
+@Service
+public class PatWildcardServiceImpl implements IPatWildcardService {
+    @Autowired
+    private PatWildcardMapper patWildcardMapper;
+
+    /**
+     * 鏌ヨ鎮h�呬俊鎭�氶厤绗�
+     *
+     * @param id 鎮h�呬俊鎭�氶厤绗︿富閿�
+     * @return 鎮h�呬俊鎭�氶厤绗�
+     */
+    @Override
+    public PatWildcard selectPatWildcardById(Long id) {
+        return patWildcardMapper.selectPatWildcardById(id);
+    }
+
+    /**
+     * 鏌ヨ鎮h�呬俊鎭�氶厤绗﹀垪琛�
+     *
+     * @param patWildcard 鎮h�呬俊鎭�氶厤绗�
+     * @return 鎮h�呬俊鎭�氶厤绗�
+     */
+    @Override
+    public List<PatWildcard> selectPatWildcardList(PatWildcard patWildcard) {
+        return patWildcardMapper.selectPatWildcardList(patWildcard);
+    }
+
+    /**
+     * 鏂板鎮h�呬俊鎭�氶厤绗�
+     *
+     * @param patWildcard 鎮h�呬俊鎭�氶厤绗�
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertPatWildcard(PatWildcard patWildcard) {
+        patWildcard.setCreateTime(DateUtils.getNowDate());
+        return patWildcardMapper.insertPatWildcard(patWildcard);
+    }
+
+    /**
+     * 淇敼鎮h�呬俊鎭�氶厤绗�
+     *
+     * @param patWildcard 鎮h�呬俊鎭�氶厤绗�
+     * @return 缁撴灉
+     */
+    @Override
+    public int updatePatWildcard(PatWildcard patWildcard) {
+        patWildcard.setUpdateTime(DateUtils.getNowDate());
+        return patWildcardMapper.updatePatWildcard(patWildcard);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎鎮h�呬俊鎭�氶厤绗�
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑鎮h�呬俊鎭�氶厤绗︿富閿�
+     * @return 缁撴灉
+     */
+    @Override
+    public int deletePatWildcardByIds(Long[] ids) {
+        return patWildcardMapper.deletePatWildcardByIds(ids);
+    }
+
+    /**
+     * 鍒犻櫎鎮h�呬俊鎭�氶厤绗︿俊鎭�
+     *
+     * @param id 鎮h�呬俊鎭�氶厤绗︿富閿�
+     * @return 缁撴灉
+     */
+    @Override
+    public int deletePatWildcardById(Long id) {
+        return patWildcardMapper.deletePatWildcardById(id);
+    }
+}
diff --git a/smartor/src/main/resources/mapper/smartor/IvrTaskMapper.xml b/smartor/src/main/resources/mapper/smartor/IvrTaskMapper.xml
index a2729d0..c43c0a3 100644
--- a/smartor/src/main/resources/mapper/smartor/IvrTaskMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/IvrTaskMapper.xml
@@ -6,7 +6,7 @@
 
     <resultMap type="com.smartor.domain.IvrTask" id="IvrTaskResult">
         <result property="taskid" column="taskid"/>
-        <result property="taskName" column="taskname"/>
+        <result property="taskName" column="task_name"/>
         <result property="templateid" column="templateid"/>
         <result property="templatename" column="templatename"/>
         <result property="labelinfo" column="labelinfo"/>
@@ -36,16 +36,17 @@
         <result property="pid" column="pid"/>
         <result property="guid" column="guid"/>
         <result property="preachform" column="preachform"/>
-        <result property="isSend" column="is_send"/>
+        <result property="sendType" column="send_type"/>
         <result property="sendState" column="send_state"/>
         <result property="param" column="param"/>
         <result property="hospType" column="hosp_type"/>
         <result property="hospno" column="hospno"/>
+        <result property="taskDesc" column="task_desc"/>
     </resultMap>
 
     <sql id="selectIvrTaskVo">
         select taskid,
-               taskname,
+               task_name,
                templateid,
                templatename,
                labelinfo,
@@ -59,6 +60,7 @@
                checkusername,
                checktime,
                type,
+               task_desc,
                hosp_type,
                hospno,
                typename,
@@ -76,7 +78,7 @@
                pid,
                guid,
                preachform,
-               is_send,
+               send_type,
                send_state,
                param,
                orgid
@@ -86,7 +88,7 @@
     <select id="selectIvrTaskList" parameterType="com.smartor.domain.IvrTask" resultMap="IvrTaskResult">
         <include refid="selectIvrTaskVo"/>
         <where>
-            <if test="taskName != null  and taskName != ''">and taskname like concat('%', #{taskName}, '%')</if>
+            <if test="taskName != null  and taskName != ''">and task_name like concat('%', #{taskName}, '%')</if>
             <if test="templateid != null  and templateid != ''">and templateid = #{templateid}</if>
             <if test="templatename != null  and templatename != ''">and templatename like concat('%', #{templatename},
                 '%')
@@ -127,7 +129,7 @@
             keyProperty="taskid">
         insert into ivr_task
         <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="taskName != null">taskname,</if>
+            <if test="taskName != null">task_name,</if>
             <if test="templateid != null">templateid,</if>
             <if test="templatename != null">templatename,</if>
             <if test="labelinfo != null">labelinfo,</if>
@@ -157,11 +159,12 @@
             <if test="pid != null">pid,</if>
             <if test="guid != null">guid,</if>
             <if test="preachform != null">preachform,</if>
-            <if test="isSend != null">is_send,</if>
+            <if test="sendType != null">send_type,</if>
             <if test="sendState != null">send_state,</if>
             <if test="param != null">param,</if>
             <if test="hospType != null  and hospType != ''">hosp_type,</if>
             <if test="hospno != null  and hospno != ''">hospno,</if>
+            <if test="taskDesc != null  and taskDesc != ''">task_desc,</if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="taskName != null">#{taskName},</if>
@@ -194,18 +197,19 @@
             <if test="pid != null">#{pid},</if>
             <if test="guid != null">#{guid},</if>
             <if test="preachform != null">#{preachform},</if>
-            <if test="isSend != null">#{isSend},</if>
+            <if test="sendType != null">#{sendType},</if>
             <if test="sendState != null">#{sendState},</if>
             <if test="param != null">#{param},</if>
             <if test="hospType != null  and hospType != ''">#{hospType},</if>
             <if test="hospno != null  and hospno != ''">#{hospno},</if>
+            <if test="taskDesc != null  and taskDesc != ''">#{taskDesc},</if>
         </trim>
     </insert>
 
     <update id="updateIvrTask" parameterType="com.smartor.domain.IvrTask">
         update ivr_task
         <trim prefix="SET" suffixOverrides=",">
-            <if test="taskName != null">taskname = #{taskName},</if>
+            <if test="taskName != null">task_name = #{taskName},</if>
             <if test="templateid != null">templateid = #{templateid},</if>
             <if test="templatename != null">templatename = #{templatename},</if>
             <if test="labelinfo != null">labelinfo = #{labelinfo},</if>
@@ -235,11 +239,12 @@
             <if test="pid != null">pid = #{pid},</if>
             <if test="guid != null">guid = #{guid},</if>
             <if test="preachform != null">preachform = #{preachform},</if>
-            <if test="isSend != null">is_send = #{isSend},</if>
+            <if test="sendType != null">send_type = #{sendType},</if>
             <if test="sendState != null">send_state = #{sendState},</if>
             <if test="param != null">param = #{param},</if>
             <if test="hospType != null  and hospType != ''">hosp_type = #{hospType},</if>
             <if test="hospno != null  and hospno != ''">hospno = #{hospno},</if>
+            <if test="taskDesc != null  and taskDesc != ''">task_desc= #{taskDesc},</if>
         </trim>
         where taskid = #{taskid}
     </update>
diff --git a/smartor/src/main/resources/mapper/smartor/IvrTaskSingleMapper.xml b/smartor/src/main/resources/mapper/smartor/IvrTaskSingleMapper.xml
index f680203..e4e8855 100644
--- a/smartor/src/main/resources/mapper/smartor/IvrTaskSingleMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/IvrTaskSingleMapper.xml
@@ -24,13 +24,11 @@
         <result property="sendlimitpend" column="sendlimitpend"/>
         <result property="sendlimitnbegin" column="sendlimitnbegin"/>
         <result property="sendlimitnend" column="sendlimitnend"/>
-        <result property="sendstate" column="sendstate"/>
         <result property="senduuid" column="senduuid"/>
         <result property="result" column="result"/>
         <result property="finishtime" column="finishtime"/>
         <result property="userid" column="userid"/>
         <result property="username" column="username"/>
-        <result property="outbounduuid" column="outbounduuid"/>
         <result property="recordid" column="recordid"/>
         <result property="recallcount" column="recallcount"/>
         <result property="exrecallcount" column="exrecallcount"/>
@@ -51,7 +49,7 @@
         <result property="guid" column="guid"/>
         <result property="textParam" column="text_param"/>
         <result property="serviceform" column="serviceform"/>
-        <result property="badNo" column="bad_no"/>
+        <result property="bedNo" column="bed_no"/>
         <result property="icdName" column="icd_name"/>
         <result property="medicalRecordNo" column="medical_record_no"/>
         <result property="preachcontent" column="preachcontent"/>
@@ -91,13 +89,11 @@
                sendlimitpend,
                sendlimitnbegin,
                sendlimitnend,
-               sendstate,
                senduuid,
                result,
                finishtime,
                userid,
                username,
-               outbounduuid,
                recordid,
                recallcount,
                exrecallcount,
@@ -118,7 +114,7 @@
                guid,
                text_param,
                serviceform,
-               bad_no,
+               bed_no,
                icd_name,
                send_type,
                medical_record_no,
@@ -161,13 +157,11 @@
             <if test="sendlimitpend != null  and sendlimitpend != ''">and sendlimitpend = #{sendlimitpend}</if>
             <if test="sendlimitnbegin != null  and sendlimitnbegin != ''">and sendlimitnbegin = #{sendlimitnbegin}</if>
             <if test="sendlimitnend != null  and sendlimitnend != ''">and sendlimitnend = #{sendlimitnend}</if>
-            <if test="sendstate != null ">and sendstate = #{sendstate}</if>
             <if test="senduuid != null  and senduuid != ''">and senduuid = #{senduuid}</if>
             <if test="result != null  and result != ''">and result = #{result}</if>
             <if test="finishtime != null ">and finishtime = #{finishtime}</if>
             <if test="userid != null  and userid != ''">and userid = #{userid}</if>
             <if test="username != null  and username != ''">and username like concat('%', #{username}, '%')</if>
-            <if test="outbounduuid != null  and outbounduuid != ''">and outbounduuid = #{outbounduuid}</if>
             <if test="recordid != null ">and recordid = #{recordid}</if>
             <if test="recallcount != null ">and recallcount = #{recallcount}</if>
             <if test="exrecallcount != null ">and exrecallcount = #{exrecallcount}</if>
@@ -183,7 +177,7 @@
             <if test="serviceform != null ">and serviceform = #{serviceform}</if>
             <if test="guid != null  and guid != ''">and guid = #{guid}</if>
             <if test="textParam != null  and textParam != ''">and text_param = #{textParam}</if>
-            <if test="badNo != null">and bad_no = #{badNo}</if>
+            <if test="bedNo != null">and bed_no = #{bedNo}</if>
             <if test="icdName != null  and icdName != ''">and icd_name = #{icdName}</if>
             <if test="medicalRecordNo != null  and medicalRecordNo != ''">and medical_record_no = #{medicalRecordNo}
             </if>
@@ -224,13 +218,11 @@
             <if test="sendlimitpend != null">sendlimitpend,</if>
             <if test="sendlimitnbegin != null">sendlimitnbegin,</if>
             <if test="sendlimitnend != null">sendlimitnend,</if>
-            <if test="sendstate != null">sendstate,</if>
             <if test="senduuid != null">senduuid,</if>
             <if test="result != null">result,</if>
             <if test="finishtime != null">finishtime,</if>
             <if test="userid != null">userid,</if>
             <if test="username != null">username,</if>
-            <if test="outbounduuid != null">outbounduuid,</if>
             <if test="recordid != null">recordid,</if>
             <if test="recallcount != null">recallcount,</if>
             <if test="exrecallcount != null">exrecallcount,</if>
@@ -251,7 +243,7 @@
             <if test="guid != null">guid,</if>
             <if test="textParam != null">text_param,</if>
             <if test="serviceform != null">serviceform,</if>
-            <if test="badNo != null">bad_no,</if>
+            <if test="bedNo != null">bed_no,</if>
             <if test="icdName != null  and icdName != ''">icd_name,</if>
             <if test="medicalRecordNo != null  and medicalRecordNo != ''">medical_record_no,</if>
             <if test="preachcontent != null  and preachcontent != ''">preachcontent,</if>
@@ -287,13 +279,11 @@
             <if test="sendlimitpend != null">#{sendlimitpend},</if>
             <if test="sendlimitnbegin != null">#{sendlimitnbegin},</if>
             <if test="sendlimitnend != null">#{sendlimitnend},</if>
-            <if test="sendstate != null">#{sendstate},</if>
             <if test="senduuid != null">#{senduuid},</if>
             <if test="result != null">#{result},</if>
             <if test="finishtime != null">#{finishtime},</if>
             <if test="userid != null">#{userid},</if>
             <if test="username != null">#{username},</if>
-            <if test="outbounduuid != null">#{outbounduuid},</if>
             <if test="recordid != null">#{recordid},</if>
             <if test="recallcount != null">#{recallcount},</if>
             <if test="exrecallcount != null">#{exrecallcount},</if>
@@ -314,7 +304,7 @@
             <if test="guid != null">#{guid},</if>
             <if test="textParam != null">#{textParam},</if>
             <if test="serviceform != null">#{serviceform},</if>
-            <if test="badNo != null">#{badNo},</if>
+            <if test="bedNo != null">#{bedNo},</if>
             <if test="icdName != null  and icdName != ''">#{icdName},</if>
             <if test="medicalRecordNo != null  and medicalRecordNo != ''">#{medicalRecordNo},</if>
             <if test="preachcontent != null  and preachcontent != ''">#{preachcontent},</if>
@@ -354,13 +344,11 @@
             <if test="sendlimitpend != null">sendlimitpend = #{sendlimitpend},</if>
             <if test="sendlimitnbegin != null">sendlimitnbegin = #{sendlimitnbegin},</if>
             <if test="sendlimitnend != null">sendlimitnend = #{sendlimitnend},</if>
-            <if test="sendstate != null">sendstate = #{sendstate},</if>
             <if test="senduuid != null">senduuid = #{senduuid},</if>
             <if test="result != null">result = #{result},</if>
             <if test="finishtime != null">finishtime = #{finishtime},</if>
             <if test="userid != null">userid = #{userid},</if>
             <if test="username != null">username = #{username},</if>
-            <if test="outbounduuid != null">outbounduuid = #{outbounduuid},</if>
             <if test="recordid != null">recordid = #{recordid},</if>
             <if test="recallcount != null">recallcount = #{recallcount},</if>
             <if test="exrecallcount != null">exrecallcount = #{exrecallcount},</if>
@@ -381,7 +369,7 @@
             <if test="guid != null">guid = #{guid},</if>
             <if test="textParam != null">text_param = #{textParam},</if>
             <if test="serviceform != null">serviceform = #{serviceform},</if>
-            <if test="badNo != null">bad_no = #{badNo},</if>
+            <if test="bedNo != null">bed_no = #{bedNo},</if>
             <if test="icdName != null  and icdName != ''">icd_name = #{icdName},</if>
             <if test="medicalRecordNo != null  and medicalRecordNo != ''">medical_record_no = #{medicalRecordNo},</if>
             <if test="preachcontent != null  and preachcontent != ''">preachcontent = #{preachcontent},</if>
@@ -430,13 +418,11 @@
                sendlimitpend,
                sendlimitnbegin,
                sendlimitnend,
-               sendstate,
                senduuid,
                result,
                finishtime,
                userid,
                username,
-               outbounduuid,
                recordid,
                recallcount,
                exrecallcount,
@@ -457,7 +443,7 @@
                guid,
                text_param,
                serviceform,
-               bad_no,
+               bed_no,
                icd_name,
                send_type,
                medical_record_no,
@@ -481,7 +467,6 @@
         )) AS jt
         WHERE jt.begantime > #{beganTime}
           AND jt.begantime &lt;= #{endTime}
-          AND sendstate IS NULL
           AND del_flag = 0
     </select>
 
diff --git a/smartor/src/main/resources/mapper/smartor/PatArchiveMapper.xml b/smartor/src/main/resources/mapper/smartor/PatArchiveMapper.xml
index e0e31bd..de5e23a 100644
--- a/smartor/src/main/resources/mapper/smartor/PatArchiveMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/PatArchiveMapper.xml
@@ -15,7 +15,7 @@
         <result property="idcardno" column="idcardno"/>
         <result property="birthdate" column="birthdate"/>
         <result property="age" column="age"/>
-        <result property="source" column="source"/>
+        <result property="sourcefrom" column="sourcefrom"/>
         <result property="archivetime" column="archivetime"/>
         <result property="archiveby" column="archiveby"/>
         <result property="telcode" column="telcode"/>
@@ -35,7 +35,7 @@
         <result property="pattype" column="pattype"/>
         <result property="bedNo" column="bedno"/>
         <result property="inhosptime" column="inhosptime"/>
-        <result property="membertype" column="membertype"/>
+        <result property="viptype" column="viptype"/>
     </resultMap>
 
     <sql id="selectPatArchiveVo">
@@ -49,7 +49,7 @@
                native_place,
                place_of_residence,
                birthplace,
-               source,
+               sourcefrom,
                archivetime,
                archiveby,
                telcode,
@@ -64,7 +64,7 @@
                create_time,
                isupload,
                pattype,
-               membertype,
+               viptype,
                upload_time
         from pat_archive
     </sql>
@@ -74,13 +74,13 @@
         <where>
             <if test="name != null  and name != ''">and name like concat('%', #{name}, '%')</if>
             <if test="idcardno != null  and idcardno != ''">and idcardno = #{idcardno}</if>
-            <if test="source != null ">and source = #{source}</if>
+            <if test="sourcefrom != null ">and sourcefrom = #{sourcefrom}</if>
             <if test="telcode != null  and telcode != ''">and telcode = #{telcode}</if>
             <if test="orgid != null  and orgid != ''">and orgid = #{orgid}</if>
             <if test="patid != null  and patid != ''">and patid = #{patid}</if>
             <if test="isupload != null ">and isupload = #{isupload}</if>
             <if test="uploadTime != null ">and upload_time = #{uploadTime}</if>
-            <if test="membertype != null ">and membertype = #{membertype}</if>
+            <if test="viptype != null ">and viptype = #{viptype}</if>
         </where>
     </select>
 
@@ -97,7 +97,7 @@
         a.telcode,
         a.create_time,
         a.update_time,
-        a.membertype,
+        a.viptype,
         a.birthdate
         from pat_archive a,pat_archivetag b ,base_tag c
         <where>
@@ -127,7 +127,7 @@
         <!--            iccardno-->
         <!--&lt;!&ndash;            <if test="birthdate != null">birthdate,</if>&ndash;&gt;-->
         <!--&lt;!&ndash;            <if test="age != null">age,</if>&ndash;&gt;-->
-        <!--&lt;!&ndash;            <if test="source != null">source,</if>&ndash;&gt;-->
+        <!--&lt;!&ndash;            <if test="sourcefrom != null">sourcefrom,</if>&ndash;&gt;-->
         <!--&lt;!&ndash;            <if test="archivetime != null">archivetime,</if>&ndash;&gt;-->
         <!--&lt;!&ndash;            <if test="archiveby != null">archiveby,</if>&ndash;&gt;-->
         <!--&lt;!&ndash;            <if test="telcode != null">telcode,</if>&ndash;&gt;-->
@@ -150,7 +150,7 @@
         <!--                <if test="iccardno != null">#{item.iccardno},</if>-->
         <!--&lt;!&ndash;                <if test="birthdate != null">#{birthdate},</if>&ndash;&gt;-->
         <!--&lt;!&ndash;                <if test="age != null">#{item.age},</if>&ndash;&gt;-->
-        <!--&lt;!&ndash;                <if test="source != null">#{item.source},</if>&ndash;&gt;-->
+        <!--&lt;!&ndash;                <if test="sourcefrom != null">#{item.sourcefrom},</if>&ndash;&gt;-->
         <!--&lt;!&ndash;                <if test="archivetime != null">#{item.archivetime},</if>&ndash;&gt;-->
         <!--&lt;!&ndash;                <if test="archiveby != null">#{item.archiveby},</if>&ndash;&gt;-->
         <!--&lt;!&ndash;                <if test="telcode != null">#{item.telcode},</if>&ndash;&gt;-->
@@ -169,10 +169,10 @@
         <!--        </trim>-->
 
         insert into
-        pat_archive(name,membertype,sex,idcardno,birthdate,age,source,archivetime,archiveby,telcode,relativetelcode,idcardtype,orgid,openid,dduserid,update_by,update_time
+        pat_archive(name,viptype,sex,idcardno,birthdate,age,sourcefrom,archivetime,archiveby,telcode,relativetelcode,idcardtype,orgid,openid,dduserid,update_by,update_time
         ,create_by,create_time,isupload,upload_time,pattype,place_of_residence,nation,birthplace,native_place) values
         <foreach item="item" index="index" collection="list" separator=",">
-            (#{item.name},#{item.membertype},#{item.sex},#{item.idcardno},#{item.birthdate},#{item.age},#{item.source},#{item.archivetime},#{item.archiveby}
+            (#{item.name},#{item.viptype},#{item.sex},#{item.idcardno},#{item.birthdate},#{item.age},#{item.sourcefrom},#{item.archivetime},#{item.archiveby}
             ,#{item.telcode},#{item.archiveby},#{item.idcardtype},#{item.orgid},#{item.openid},#{item.dduserid},#{item.updateBy},
             #{item.updateTime},#{item.createBy},#{item.createTime},#{item.isupload},#{item.uploadTime},#{item.pattype},#{item.placeOfResidence},#{item.nation},#{item.birthplace},#{item.nativePlace}
             )
@@ -187,7 +187,7 @@
             <if test="idcardno != null">idcardno = #{idcardno},</if>
             <if test="birthdate != null">birthdate = #{birthdate},</if>
             <if test="age != null">age = #{age},</if>
-            <if test="source != null">source = #{source},</if>
+            <if test="sourcefrom != null">sourcefrom = #{sourcefrom},</if>
             <if test="archivetime != null">archivetime = #{archivetime},</if>
             <if test="archiveby != null">archiveby = #{archiveby},</if>
             <if test="telcode != null">telcode = #{telcode},</if>
@@ -202,7 +202,7 @@
             <if test="createTime != null">create_time = #{createTime},</if>
             <if test="isupload != null">isupload = #{isupload},</if>
             <if test="uploadTime != null">upload_time = #{uploadTime},</if>
-            <if test="membertype != null">membertype = #{membertype},</if>
+            <if test="viptype != null">viptype = #{viptype},</if>
         </trim>
         where patid = #{patid}
     </update>
@@ -236,7 +236,7 @@
         a.idcardno,
         a.birthdate,
         a.age,
-        a.source,
+        a.sourcefrom,
         a.archivetime,
         a.archiveby,
         a.telcode,
@@ -251,7 +251,7 @@
         a.create_time,
         a.isupload,
         a.upload_time,
-        a.membertype,
+        a.viptype,
         a.pattype
         from pat_archive a,pat_archivetag b ,base_tag c
         <where>
@@ -287,14 +287,14 @@
         a.idcardno,
         a.birthdate,
         a.age,
-        a.source,
+        a.sourcefrom,
         a.archivetime,
         a.archiveby,
         a.telcode,
         a.relativetelcode,
         a.idcardtype,
         a.orgid,
-        a.membertype,
+        a.viptype,
         a.openid,
         a.del_flag,
         a.update_by,
@@ -364,8 +364,8 @@
         a.idcardno,
         a.birthdate,
         a.age,
-        a.membertype,
-        a.source,
+        a.viptype,
+        a.sourcefrom,
         a.archivetime,
         a.archiveby,
         a.telcode,
@@ -434,11 +434,11 @@
         a.native_place,
         a.place_of_residence,
         a.birthplace,
-        a.membertype,
+        a.viptype,
         a.idcardno,
         a.birthdate,
         a.age,
-        a.source,
+        a.sourcefrom,
         a.archivetime,
         a.archiveby,
         a.telcode,
diff --git a/smartor/src/main/resources/mapper/smartor/PatWildcardMapper.xml b/smartor/src/main/resources/mapper/smartor/PatWildcardMapper.xml
new file mode 100644
index 0000000..c026ed5
--- /dev/null
+++ b/smartor/src/main/resources/mapper/smartor/PatWildcardMapper.xml
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.smartor.mapper.PatWildcardMapper">
+
+    <resultMap type="com.smartor.domain.PatWildcard" id="PatWildcardResult">
+        <result property="id" column="id"/>
+        <result property="wildcard" column="wildcard"/>
+        <result property="patField" column="pat_field"/>
+        <result property="delFlag" column="del_flag"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+    </resultMap>
+
+    <sql id="selectPatWildcardVo">
+        select id,
+               wildcard,
+               pat_field,
+               del_flag,
+               update_by,
+               update_time,
+               create_by,
+               create_time
+        from pat_wildcard
+    </sql>
+
+    <select id="selectPatWildcardList" parameterType="com.smartor.domain.PatWildcard" resultMap="PatWildcardResult">
+        <include refid="selectPatWildcardVo"/>
+        <where>
+            <if test="wildcard != null  and wildcard != ''">and wildcard = #{wildcard}</if>
+            <if test="patField != null  and patField != ''">and pat_field = #{patField}</if>
+        </where>
+    </select>
+
+    <select id="selectPatWildcardById" parameterType="Long" resultMap="PatWildcardResult">
+        <include refid="selectPatWildcardVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertPatWildcard" parameterType="com.smartor.domain.PatWildcard" useGeneratedKeys="true"
+            keyProperty="id">
+        insert into pat_wildcard
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="wildcard != null">wildcard,</if>
+            <if test="patField != null">pat_field,</if>
+            <if test="delFlag != null and delFlag != ''">del_flag,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="wildcard != null">#{wildcard},</if>
+            <if test="patField != null">#{patField},</if>
+            <if test="delFlag != null and delFlag != ''">#{delFlag},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+        </trim>
+    </insert>
+
+    <update id="updatePatWildcard" parameterType="com.smartor.domain.PatWildcard">
+        update pat_wildcard
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="wildcard != null">wildcard = #{wildcard},</if>
+            <if test="patField != null">pat_field = #{patField},</if>
+            <if test="delFlag != null and delFlag != ''">del_flag = #{delFlag},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deletePatWildcardById" parameterType="Long">
+        delete
+        from pat_wildcard
+        where id = #{id}
+    </delete>
+
+    <delete id="deletePatWildcardByIds" parameterType="String">
+        delete from pat_wildcard where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>
diff --git a/smartor/src/main/resources/mapper/smartor/SvyLibTopicMapper.xml b/smartor/src/main/resources/mapper/smartor/SvyLibTopicMapper.xml
index 2f4bf1e..ce6c640 100644
--- a/smartor/src/main/resources/mapper/smartor/SvyLibTopicMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/SvyLibTopicMapper.xml
@@ -72,7 +72,8 @@
             <if test="oldid != null ">and oldid = #{oldid}</if>
             <if test="topictype != null and topictype != ''">and topictype = #{topictype}</if>
             <if test="categoryid != null ">and categoryid = #{categoryid}</if>
-            <if test="topic != null  and topic != ''">and topic = #{topic}</if>
+            <if test="topic != null  and topic != ''">and topic like concat('%', #{topic}, '%')</if>
+
             <if test="ishide != null ">and ishide = #{ishide}</if>
             <if test="orgid != null  and orgid != ''">and orgid = #{orgid}</if>
             <if test="svyid != null  and svyid != ''">and svyid = #{svyid}</if>

--
Gitblit v1.9.3