From cc3fe1ad9b366533d184d9e239b45f731f014e74 Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期四, 23 四月 2026 11:22:38 +0800
Subject: [PATCH] Merge branch 'master' into master-手术随访

---
 smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java     |   14 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/tools/BaseSmsaccountController.java |    9 
 smartor/src/main/java/com/smartor/domain/IvrLibaTemplateTargetoption.java                      |    6 
 smartor/src/main/resources/mapper/smartor/SvyLibScriptOptionMapper.xml                         |    6 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/tools/DingTalkController.java       |    2 
 smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java                 |   41 +
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserDeptServiceImpl.java           |    4 
 smartor/src/main/java/com/smartor/domain/IvrTaskTemplateTargetoption.java                      |    6 
 smartor/src/main/java/com/smartor/domain/BaseSmsRequest.java                                   |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java                     |    3 
 smartor/src/main/java/com/smartor/service/impl/PatMedOuthospServiceImpl.java                   |    5 
 smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java                    |   10 
 smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml                               |  137 +++--
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java              |    4 
 ruoyi-common/src/main/java/com/ruoyi/common/utils/AesUtils.java                                |  129 +++++
 smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java                  |  238 +++++++++
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceExternalController.java      |   28 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/EquipmentinfoController.java        |    2 
 smartor/src/main/java/com/smartor/domain/SvyTaskTemplateTargetoption.java                      |   12 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java               |    4 
 smartor/src/main/resources/mapper/smartor/IvrTaskTemplateTargetoptionMapper.xml                |    6 
 smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java            |   12 
 smartor/src/main/java/com/smartor/service/IServiceExternalService.java                         |    4 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SmsRecordsServiceImpl.java            |   19 
 smartor/src/main/java/com/smartor/domain/IvrLibaScriptTargetoption.java                        |    6 
 smartor/src/main/resources/mapper/smartor/SvyTaskTemplateTargetoptionMapper.xml                |   78 +-
 smartor/src/main/java/com/smartor/domain/ServiceSubtaskStatistic.java                          |    3 
 ruoyi-system/pom.xml                                                                           |   12 
 smartor/src/main/java/com/smartor/domain/ServiceSubtaskCountReq.java                           |    4 
 smartor/src/main/java/com/smartor/service/DingTalkService.java                                 |    5 
 smartor/src/main/java/com/smartor/service/impl/DingTalkServiceImpl.java                        |    2 
 smartor/src/main/java/com/smartor/domain/SvyLibTemplateTargetoption.java                       |   12 
 smartor/src/main/java/com/smartor/service/IServiceSubtaskService.java                          |   14 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/EquipmentinfoServiceImpl.java         |    9 
 /dev/null                                                                                      |   55 --
 smartor/src/main/java/com/smartor/domain/SvyLibScriptOption.java                               |    6 
 smartor/src/main/resources/mapper/smartor/IvrLibaTemplateTargetoptionMapper.xml                |    9 
 ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java                                   |   16 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java               |  157 ++----
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java       |   32 -
 smartor/src/main/java/com/smartor/domain/PatMedInhosp.java                                     |   11 
 smartor/src/main/resources/mapper/smartor/SvyLibTemplateTargetoptionMapper.xml                 |    6 
 ruoyi-common/src/main/java/com/ruoyi/common/utils/WxMpUtils.java                               |  175 +++++++
 ruoyi-admin/src/main/java/com/ruoyi/web/component/RedisMqReceiver.java                         |    1 
 smartor/src/main/resources/mapper/smartor/IvrLibaScriptTargetoptionMapper.xml                  |   66 +-
 45 files changed, 997 insertions(+), 385 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/component/RedisMqReceiver.java b/ruoyi-admin/src/main/java/com/ruoyi/web/component/RedisMqReceiver.java
index c5bdd02..0190474 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/component/RedisMqReceiver.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/component/RedisMqReceiver.java
@@ -757,6 +757,7 @@
                 if (allSendStateNot1AndNot9) {
                     //璇存槑鍏ㄥ彂閫佸け璐ヤ簡
                     serviceSubtask.setSendstate(5L);
+                    serviceSubtask.setUpdateTime(new Date());
                     serviceSubtask.setRemark("-----getSendPreachform,鍙戦�佹柟寮忓叏閮ㄥけ璐�");
                     serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
                 }
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/EquipmentinfoController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/EquipmentinfoController.java
index c5131cb..2a2e3b6 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/EquipmentinfoController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/EquipmentinfoController.java
@@ -7,8 +7,6 @@
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.system.domain.ReportReqVo;
 import com.ruoyi.system.service.IBaseUserInfoService;
-import com.smartor.domain.DingTalkReqVo;
-import com.smartor.service.DingTalkService;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceExternalController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceExternalController.java
index 9751402..eb956a2 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceExternalController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceExternalController.java
@@ -4,6 +4,7 @@
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.model.LoginUser;
 import com.ruoyi.common.utils.DtoConversionUtils;
 import com.ruoyi.system.service.ISysConfigService;
 import com.smartor.domain.*;
@@ -14,10 +15,7 @@
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.Date;
 import java.util.HashMap;
@@ -86,9 +84,9 @@
         log.info("------serviceQueryInfo鐨勫叆鍙備负锛歿}", serviceQueryInfo);
         Map map = null;
         try {
-            String url = configService.selectConfigByKey("token.360",serviceQueryInfo.getXiaoXiTou().getFaSongJGID());
+            String url = configService.selectConfigByKey("token.360", serviceQueryInfo.getXiaoXiTou().getFaSongJGID());
             serviceQueryInfo.setUrl(url);
-            String url360 = configService.selectConfigByKey("url.360",serviceQueryInfo.getXiaoXiTou().getFaSongJGID());
+            String url360 = configService.selectConfigByKey("url.360", serviceQueryInfo.getXiaoXiTou().getFaSongJGID());
             serviceQueryInfo.setUrl360(url360);
             map = svyTaskSingleService.query360PatInfo(serviceQueryInfo);
         } catch (Exception e) {
@@ -374,6 +372,21 @@
         return returnParam(aBoolean, dataMap);
     }
 
+    /**
+     * 360鎮h�呬俊鎭幏鍙�
+     */
+    @ApiOperation("360鎮h�呬俊鎭幏鍙栵紙鏉ユ湭鏉ワ級")
+    @GetMapping("/query360PatInfolwl/{patid}")
+    public Map<String, Object> query360PatInfolwl(@PathVariable("patid") Long patid) {
+        Map<String, Object> result = new HashMap<>();
+        if (patid == null) {
+            result.put("url", null);
+            result.put("error", "鎮h�卛d涓虹┖");
+            return result;
+        }
+        LoginUser loginUser = getLoginUser();
+        return serviceExternalService.query360PatInfolwl(patid, loginUser.getUser());
+    }
 
 
     private Map<String, Object> returnParam(Boolean b, Map dataMap) {
@@ -395,9 +408,6 @@
         map.put("Data", map2);
         return map;
     }
-
-
-
 
 
 }
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java
index e56e2f7..92bfa3d 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java
@@ -437,37 +437,6 @@
     }
 
     /**
-     * 鏂板鎴栦慨鏀瑰垹闄ゅ崟涓�浠诲姟(涓存椂鎺ュ彛)
-     */
-    @ApiOperation("鏂板鎴栦慨鏀瑰垹闄ゅ崟涓�浠诲姟(涓存椂鎺ュ彛)")
-    //@PreAuthorize("@ss.hasPermi('system:task:add')")
-    @Log(title = "鍗曚竴浠诲姟锛堥殢璁匡級", businessType = BusinessType.INSERT)
-    @AddOrgId(field = "orgid", paramIndex = 0, campusField = "campusid")
-    @PostMapping("/insertOrUpdateTaskByTaskId")
-    public AjaxResult insertOrUpdateTaskByTaskId(@RequestBody ServiceTaskVO ivrTaskVO) {
-        log.info("insertOrUpdateTaskByTaskId鐨勫叆鍙備负锛歿}", ivrTaskVO);
-        LoginUser loginUser = getLoginUser();
-        SysUser user = loginUser.getUser();
-        ivrTaskVO.setCreateBy(user.getNickName());
-        ivrTaskVO.setUpdateBy(user.getNickName());
-        ivrTaskVO.setOrgid(user.getOrgid());
-        //鏍规嵁鍏ュ弬鏌ヨ淇℃伅-鐢ㄦ埛鍏崇郴
-        ServiceSubtask serviceSubtask = new ServiceSubtask();
-        if(ObjectUtils.isNotEmpty(ivrTaskVO.getTaskid())){
-            serviceSubtask.setTaskid(ivrTaskVO.getTaskid());
-            serviceSubtask.setOrgid(user.getOrgid());
-            serviceSubtask.setCampusid(user.getCampusid());
-            ServiceTaskVO ivrTaskVO1 = serviceSubtaskService.queryTaskByCondition(serviceSubtask);
-            ivrTaskVO.setPatTaskRelevances(ivrTaskVO1.getPatTaskRelevances());
-
-            return success(serviceSubtaskService.insertOrUpdateTask(ivrTaskVO));
-        }else {
-            return error("insertOrUpdateTaskByTaskId taskid涓嶅彲涓虹┖");
-        }
-
-    }
-
-    /**
      * 鐢佃瘽鍥炶皟浠诲姟(涓婃捣)
      */
     @ApiOperation("鐢佃瘽鍥炶皟浠诲姟")
@@ -758,6 +727,5 @@
         }
         return map;
     }
-
 
 }
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/tools/BaseSmsaccountController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/tools/BaseSmsaccountController.java
index 7c41d3b..b7c8ec7 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/tools/BaseSmsaccountController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/tools/BaseSmsaccountController.java
@@ -12,6 +12,7 @@
 import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.common.utils.sms.smsUtils;
+import com.smartor.common.MtSubmitSmUtil;
 import com.smartor.domain.BaseSmsRequest;
 import com.smartor.domain.BaseSmsaccount;
 import com.smartor.domain.BatchBaseSmsRequest;
@@ -27,6 +28,7 @@
 
 import javax.servlet.http.HttpServletResponse;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 鐭俊璐﹀彿Controller
@@ -52,6 +54,9 @@
 
     @Value("${spring.profiles.active}")
     private String active;
+
+    @Autowired
+    private MtSubmitSmUtil mtSubmitSmUtil;
 
     /**
      * 鏌ヨ鐭俊璐﹀彿鍒楄〃
@@ -135,6 +140,10 @@
                 return AjaxResult.error(ex.getMessage());
             }
             return AjaxResult.success(sendMsg);
+        } else if (active.equals("nhfy")) {
+            Map<String, Object> smsResult = mtSubmitSmUtil.submitSm(baseSmsRequest.getPhoneNumber(), baseSmsRequest.getTemplateCode());
+            return AjaxResult.success(smsResult.get("result"));
+
         } else {
             if (baseSmsaccountService.sendMsg(baseSmsRequest) == null) {
                 return error();
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/tools/DingTalkController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/tools/DingTalkController.java
index e441f16..5e1689d 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/tools/DingTalkController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/tools/DingTalkController.java
@@ -1,7 +1,7 @@
 package com.ruoyi.web.controller.smartor.tools;
 
 import com.ruoyi.common.core.controller.BaseController;
-import com.smartor.domain.DingTalkReqVo;
+import com.ruoyi.common.core.domain.DingTalkReqVo;
 import com.smartor.service.DingTalkService;
 import com.taobao.api.ApiException;
 import io.swagger.annotations.Api;
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
index c8d149a..ca1b30b 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
@@ -15,10 +15,11 @@
 import com.ruoyi.system.service.ISysConfigService;
 import com.ruoyi.system.service.ISysDeptService;
 import com.ruoyi.system.service.ISysMenuService;
-import com.smartor.mapper.SysUserDeptMapper;
+import com.ruoyi.system.mapper.SysUserDeptMapper;
 import com.smartor.service.IServiceSLTDHealthcareRecordService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.servlet.view.RedirectView;
@@ -55,6 +56,7 @@
     private IServiceSLTDHealthcareRecordService iServiceSLTDHealthcareRecordService;
 
     @Autowired
+    @Qualifier("sysUserDeptSystemMapper")
     private SysUserDeptMapper sysUserDeptMapper;
 
     /**
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
index 2f04784..186c05d 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
@@ -20,12 +20,13 @@
 import com.ruoyi.system.service.ISysPostService;
 import com.ruoyi.system.service.ISysRoleService;
 import com.ruoyi.system.service.ISysUserService;
-import com.smartor.mapper.SysUserDeptMapper;
+import com.ruoyi.system.mapper.SysUserDeptMapper;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
@@ -60,6 +61,7 @@
     private ISysPostService postService;
 
     @Autowired
+    @Qualifier("sysUserDeptSystemMapper")
     private SysUserDeptMapper sysUserDeptMapper;
 
     @Value("${isAdmin}")
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/AesUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/AesUtils.java
new file mode 100644
index 0000000..902650d
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/AesUtils.java
@@ -0,0 +1,129 @@
+package com.ruoyi.common.utils;
+
+import javax.crypto.Cipher;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+import java.nio.charset.StandardCharsets;
+
+/**
+ * AES 鍔犺В瀵嗗伐鍏风被
+ * 绠楁硶锛欰ES/CBC/PKCS5Padding锛堢瓑鏁� PKCS7锛�128 浣嶆暟鎹潡锛�
+ * 杈撳嚭锛欻EX 澶у啓瀛楃涓�
+ * 瀛楃闆嗭細UTF-8
+ */
+public class AesUtils {
+
+    /** 绠楁硶/妯″紡/濉厖 */
+    private static final String ALGORITHM = "AES/CBC/PKCS5Padding";
+
+    /** 榛樿 Key锛圚EX锛�32瀛楄妭鈫�256浣嶅瘑閽ワ級 */
+    private static final String DEFAULT_KEY = "0F471C56362408AF8DB929C38EDFD23C";
+
+    /** 榛樿 IV锛圚EX锛�16瀛楄妭鈫�128浣嶅亸绉婚噺锛� */
+    private static final String DEFAULT_IV = "11BEE6E35B881A33CF1649607295D1A7";
+
+    private AesUtils() {
+    }
+
+    // -------------------------------------------------------------------------
+    // 鍏叡 API
+    // -------------------------------------------------------------------------
+
+    /**
+     * 浣跨敤榛樿 Key / IV 鍔犲瘑
+     *
+     * @param plainText 鏄庢枃
+     * @return HEX 澶у啓瀵嗘枃
+     */
+    public static String encrypt(String plainText) {
+        return encrypt(plainText, DEFAULT_KEY, DEFAULT_IV);
+    }
+
+    /**
+     * 浣跨敤榛樿 Key / IV 瑙e瘑
+     *
+     * @param hexCipherText HEX 澶у啓瀵嗘枃
+     * @return 鏄庢枃
+     */
+    public static String decrypt(String hexCipherText) {
+        return decrypt(hexCipherText, DEFAULT_KEY, DEFAULT_IV);
+    }
+
+    /**
+     * AES-CBC 鍔犲瘑
+     *
+     * @param plainText  鏄庢枃
+     * @param hexKey     HEX 鏍煎紡鐨勫瘑閽ワ紙16/24/32瀛楄妭瀵瑰簲128/192/256浣嶏級
+     * @param hexIv      HEX 鏍煎紡鐨勫亸绉婚噺锛�16瀛楄妭锛�
+     * @return HEX 澶у啓瀵嗘枃
+     */
+    public static String encrypt(String plainText, String hexKey, String hexIv) {
+        try {
+            byte[] keyBytes = hexToBytes(hexKey);
+            byte[] ivBytes = hexToBytes(hexIv);
+            SecretKeySpec secretKey = new SecretKeySpec(keyBytes, "AES");
+            IvParameterSpec ivSpec = new IvParameterSpec(ivBytes);
+            Cipher cipher = Cipher.getInstance(ALGORITHM);
+            cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivSpec);
+            byte[] encrypted = cipher.doFinal(plainText.getBytes(StandardCharsets.UTF_8));
+            return bytesToHex(encrypted).toUpperCase();
+        } catch (Exception e) {
+            throw new RuntimeException("AES 鍔犲瘑澶辫触", e);
+        }
+    }
+
+    /**
+     * AES-CBC 瑙e瘑
+     *
+     * @param hexCipherText HEX 澶у啓瀵嗘枃
+     * @param hexKey        HEX 鏍煎紡鐨勫瘑閽�
+     * @param hexIv         HEX 鏍煎紡鐨勫亸绉婚噺
+     * @return 鏄庢枃
+     */
+    public static String decrypt(String hexCipherText, String hexKey, String hexIv) {
+        try {
+            byte[] keyBytes = hexToBytes(hexKey);
+            byte[] ivBytes = hexToBytes(hexIv);
+            byte[] cipherBytes = hexToBytes(hexCipherText);
+            SecretKeySpec secretKey = new SecretKeySpec(keyBytes, "AES");
+            IvParameterSpec ivSpec = new IvParameterSpec(ivBytes);
+            Cipher cipher = Cipher.getInstance(ALGORITHM);
+            cipher.init(Cipher.DECRYPT_MODE, secretKey, ivSpec);
+            byte[] decrypted = cipher.doFinal(cipherBytes);
+            return new String(decrypted, StandardCharsets.UTF_8);
+        } catch (Exception e) {
+            throw new RuntimeException("AES 瑙e瘑澶辫触", e);
+        }
+    }
+
+    // -------------------------------------------------------------------------
+    // 绉佹湁杈呭姪鏂规硶
+    // -------------------------------------------------------------------------
+
+    /**
+     * HEX 瀛楃涓茶浆瀛楄妭鏁扮粍锛堝ぇ灏忓啓鍧囧彲锛�
+     */
+    private static byte[] hexToBytes(String hex) {
+        if (hex == null || hex.length() % 2 != 0) {
+            throw new IllegalArgumentException("闈炴硶 HEX 瀛楃涓诧細" + hex);
+        }
+        int len = hex.length();
+        byte[] data = new byte[len / 2];
+        for (int i = 0; i < len; i += 2) {
+            data[i / 2] = (byte) ((Character.digit(hex.charAt(i), 16) << 4)
+                    + Character.digit(hex.charAt(i + 1), 16));
+        }
+        return data;
+    }
+
+    /**
+     * 瀛楄妭鏁扮粍杞� HEX 瀛楃涓诧紙灏忓啓锛岃皟鐢ㄦ柟缁熶竴杞ぇ鍐欙級
+     */
+    private static String bytesToHex(byte[] bytes) {
+        StringBuilder sb = new StringBuilder(bytes.length * 2);
+        for (byte b : bytes) {
+            sb.append(String.format("%02x", b));
+        }
+        return sb.toString();
+    }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/WxMpUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/WxMpUtils.java
new file mode 100644
index 0000000..89cc4ef
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/WxMpUtils.java
@@ -0,0 +1,175 @@
+package com.ruoyi.common.utils;
+
+import lombok.extern.slf4j.Slf4j;
+import me.chanjar.weixin.common.exception.WxErrorException;
+import me.chanjar.weixin.mp.api.WxMpInMemoryConfigStorage;
+import me.chanjar.weixin.mp.api.WxMpService;
+import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
+import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage;
+import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
+import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
+
+import java.util.Map;
+
+/**
+ * 寰俊鍏紬鍙锋秷鎭彂閫佸伐鍏风被
+ * 鏀寔锛氭枃鏈鏈嶆秷鎭�佹ā鏉挎秷鎭�
+ */
+@Slf4j
+public class WxMpUtils {
+
+    private final WxMpService wxMpService;
+
+    /**
+     * 鏋勯�犳柟娉曪紝閫氳繃 appId 鍜� appSecret 鍒濆鍖栧井淇″叕浼楀彿鏈嶅姟
+     *
+     * @param appId     寰俊鍏紬鍙� AppID
+     * @param appSecret 寰俊鍏紬鍙� AppSecret
+     */
+    public WxMpUtils(String appId, String appSecret) {
+        WxMpInMemoryConfigStorage configStorage = new WxMpInMemoryConfigStorage();
+        configStorage.setAppId(appId);
+        configStorage.setSecret(appSecret);
+        wxMpService = new WxMpServiceImpl();
+        wxMpService.setWxMpConfigStorage(configStorage);
+    }
+
+    // -------------------------------------------------------------------------
+    // 鏂囨湰瀹㈡湇娑堟伅
+    // -------------------------------------------------------------------------
+
+    /**
+     * 鍚戞寚瀹� openid 鐨勭敤鎴峰彂閫佹枃鏈鏈嶆秷鎭�
+     * 娉ㄦ剰锛氱敤鎴烽渶鍦�48灏忔椂鍐呬笌鍏紬鍙锋湁杩囦氦浜掓墠鍙彂閫�
+     *
+     * @param openid  鐢ㄦ埛鐨勫井淇� openid
+     * @param content 娑堟伅鍐呭
+     * @return 鍙戦�佹垚鍔熻繑鍥� true锛屽け璐ヨ繑鍥� false
+     */
+    public boolean sendTextMessage(String openid, String content) {
+        if (StringUtils.isEmpty(openid)) {
+            log.warn("銆怶xMpUtils銆憇endTextMessage 澶辫触锛歰penid 涓虹┖");
+            return false;
+        }
+        if (StringUtils.isEmpty(content)) {
+            log.warn("銆怶xMpUtils銆憇endTextMessage 澶辫触锛歝ontent 涓虹┖");
+            return false;
+        }
+        try {
+            WxMpKefuMessage message = WxMpKefuMessage.TEXT()
+                    .toUser(openid)
+                    .content(content)
+                    .build();
+            boolean result = wxMpService.getKefuService().sendKefuMessage(message);
+            log.info("銆怶xMpUtils銆戞枃鏈鏈嶆秷鎭彂閫亄}锛宱penid锛歿}", result ? "鎴愬姛" : "澶辫触", openid);
+            return result;
+        } catch (WxErrorException e) {
+            log.error("銆怶xMpUtils銆戞枃鏈鏈嶆秷鎭彂閫佸紓甯革紝openid锛歿}锛岄敊璇細{}", openid, e.getError(), e);
+            return false;
+        }
+    }
+
+    // -------------------------------------------------------------------------
+    // 妯℃澘娑堟伅
+    // -------------------------------------------------------------------------
+
+    /**
+     * 鍚戞寚瀹� openid 鐨勭敤鎴峰彂閫佹ā鏉挎秷鎭紙鍚烦杞琔RL锛�
+     *
+     * @param openid     鐢ㄦ埛鐨勫井淇� openid
+     * @param templateId 妯℃澘娑堟伅 ID锛堝湪寰俊鍏紬骞冲彴閰嶇疆锛�
+     * @param url        鐐瑰嚮娑堟伅鍚庣殑璺宠浆 URL锛屼笉闇�瑕佽烦杞彲浼� null
+     * @param dataMap    妯℃澘鏁版嵁锛宬ey 涓烘ā鏉垮瓧娈靛悕锛寁alue 涓� WxMpTemplateData锛堝惈鍊煎拰棰滆壊锛�
+     *                   绀轰緥锛歿"first": new WxMpTemplateData("first", "浣犲ソ", "#173177"), ...}
+     * @return 鍙戦�佹垚鍔熻繑鍥炲井淇¤繑鍥炵殑 msgid锛屽け璐ヨ繑鍥� null
+     */
+    public String sendTemplateMessage(String openid, String templateId, String url,
+                                      Map<String, WxMpTemplateData> dataMap) {
+        if (StringUtils.isEmpty(openid)) {
+            log.warn("銆怶xMpUtils銆憇endTemplateMessage 澶辫触锛歰penid 涓虹┖");
+            return null;
+        }
+        if (StringUtils.isEmpty(templateId)) {
+            log.warn("銆怶xMpUtils銆憇endTemplateMessage 澶辫触锛歵emplateId 涓虹┖");
+            return null;
+        }
+        try {
+            WxMpTemplateMessage templateMessage = new WxMpTemplateMessage();
+            templateMessage.setToUser(openid);
+            templateMessage.setTemplateId(templateId);
+            if (StringUtils.isNotEmpty(url)) {
+                templateMessage.setUrl(url);
+            }
+            if (dataMap != null) {
+                for (WxMpTemplateData data : dataMap.values()) {
+                    templateMessage.addData(data);
+                }
+            }
+            String msgId = wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
+            log.info("銆怶xMpUtils銆戞ā鏉挎秷鎭彂閫佹垚鍔燂紝openid锛歿}锛宮sgId锛歿}", openid, msgId);
+            return msgId;
+        } catch (WxErrorException e) {
+            log.error("銆怶xMpUtils銆戞ā鏉挎秷鎭彂閫佸紓甯革紝openid锛歿}锛宼emplateId锛歿}锛岄敊璇細{}",
+                    openid, templateId, e.getError(), e);
+            return null;
+        }
+    }
+
+    /**
+     * 鍚戞寚瀹� openid 鐨勭敤鎴峰彂閫佹ā鏉挎秷鎭紙绠�鍖栫増锛寁alue 涓嶈缃鑹诧級
+     *
+     * @param openid     鐢ㄦ埛鐨勫井淇� openid
+     * @param templateId 妯℃澘娑堟伅 ID
+     * @param url        鐐瑰嚮娑堟伅鍚庣殑璺宠浆 URL锛屼笉闇�瑕佽烦杞彲浼� null
+     * @param dataMap    妯℃澘鏁版嵁锛宬ey 涓烘ā鏉垮瓧娈靛悕锛寁alue 涓哄瓧娈垫樉绀虹殑鏂囨湰鍐呭
+     *                   绀轰緥锛歿"first": "浣犲ソ", "keyword1": "2024-01-01", "remark": "鎰熻阿浣跨敤"}
+     * @return 鍙戦�佹垚鍔熻繑鍥炲井淇¤繑鍥炵殑 msgid锛屽け璐ヨ繑鍥� null
+     */
+    public String sendTemplateMessage(String openid, String templateId, String url,
+                                      Map<String, String> dataMap, String defaultColor) {
+        if (StringUtils.isEmpty(openid)) {
+            log.warn("銆怶xMpUtils銆憇endTemplateMessage 澶辫触锛歰penid 涓虹┖");
+            return null;
+        }
+        if (StringUtils.isEmpty(templateId)) {
+            log.warn("銆怶xMpUtils銆憇endTemplateMessage 澶辫触锛歵emplateId 涓虹┖");
+            return null;
+        }
+        try {
+            WxMpTemplateMessage templateMessage = new WxMpTemplateMessage();
+            templateMessage.setToUser(openid);
+            templateMessage.setTemplateId(templateId);
+            if (StringUtils.isNotEmpty(url)) {
+                templateMessage.setUrl(url);
+            }
+            if (dataMap != null) {
+                String color = StringUtils.isEmpty(defaultColor) ? "#173177" : defaultColor;
+                for (Map.Entry<String, String> entry : dataMap.entrySet()) {
+                    templateMessage.addData(new WxMpTemplateData(entry.getKey(), entry.getValue(), color));
+                }
+            }
+            String msgId = wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
+            log.info("銆怶xMpUtils銆戞ā鏉挎秷鎭彂閫佹垚鍔燂紝openid锛歿}锛宮sgId锛歿}", openid, msgId);
+            return msgId;
+        } catch (WxErrorException e) {
+            log.error("銆怶xMpUtils銆戞ā鏉挎秷鎭彂閫佸紓甯革紝openid锛歿}锛宼emplateId锛歿}锛岄敊璇細{}",
+                    openid, templateId, e.getError(), e);
+            return null;
+        }
+    }
+
+    // -------------------------------------------------------------------------
+    // 闈欐�佸伐鍘傛柟娉曪紙蹇�熸瀯閫狅級
+    // -------------------------------------------------------------------------
+
+    /**
+     * 蹇�熷垱寤� WxMpUtils 瀹炰緥
+     *
+     * @param appId     寰俊鍏紬鍙� AppID
+     * @param appSecret 寰俊鍏紬鍙� AppSecret
+     * @return WxMpUtils 瀹炰緥
+     */
+    public static WxMpUtils of(String appId, String appSecret) {
+        return new WxMpUtils(appId, appSecret);
+    }
+}
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
index 854ebae..c3c9e67 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
@@ -609,6 +609,18 @@
         }
     }
 
+    /**
+     * 璁剧疆澶辫触浠诲姟榛樿鍊�,骞跺皢澶辫触浠诲姟閲嶆柊缃负鎴愬姛
+     * <p>
+     * *@param failDay   (澶辫触澶╂暟锛氳窛绂诲綋鍓嶆棩鏈熷け璐ュぉ鏁�)
+     *
+     * @return
+     */
+    public void setFailSubTaskDefalutVal() {
+        String failDay = configService.selectConfigByKey("hosp.default.fail.day");
+        if (StringUtils.isNotEmpty(failDay)) iServiceSubtaskService.setFailSubTaskDefalutVal(Long.valueOf(failDay));
+    }
+
 
     /**
      * 鍒ゆ柇鏃ユ湡鏄惁鏄粖澶�
@@ -616,7 +628,7 @@
      * @param date
      * @return
      */
-    public boolean isDateToday(Date date) {
+    private boolean isDateToday(Date date) {
         if (date == null) {
             return false;
         }
@@ -633,7 +645,7 @@
      *
      * @param serviceSubtask
      */
-    public void sfHandlle(ServiceSubtask serviceSubtask) {
+    private void sfHandlle(ServiceSubtask serviceSubtask) {
         //杩欓噷闇�瑕佹牴鎹韩浠借瘉鍘婚噸(缁欏井淇″皬绋嬪簭鐨勫浐瀹氫换鍔$敤鐨�)
         List<ServiceSubtask> serviceSubtaskListFilter = new ArrayList<>();
         ServiceTask ivrTask1 = serviceTaskMapper.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
diff --git a/ruoyi-system/pom.xml b/ruoyi-system/pom.xml
index a0759e5..4470c91 100644
--- a/ruoyi-system/pom.xml
+++ b/ruoyi-system/pom.xml
@@ -22,13 +22,17 @@
             <groupId>com.ruoyi</groupId>
             <artifactId>ruoyi-common</artifactId>
         </dependency>
+
+        <!-- WebService (鐭俊鍙戦��) -->
         <dependency>
-            <groupId>com.ruoyi</groupId>
-            <artifactId>smartor</artifactId>
+            <groupId>org.apache.axis</groupId>
+            <artifactId>axis</artifactId>
+            <version>1.4</version>
         </dependency>
         <dependency>
-            <groupId>com.ruoyi</groupId>
-            <artifactId>smartor</artifactId>
+            <groupId>org.apache.axis</groupId>
+            <artifactId>axis-jaxrpc</artifactId>
+            <version>1.4</version>
         </dependency>
 
     </dependencies>
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java
index 96c1d92..91ddf86 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java
@@ -1,6 +1,7 @@
 package com.ruoyi.system.service;
 
 import java.util.List;
+import com.ruoyi.common.core.service.IConfigService;
 import com.ruoyi.system.domain.SysConfig;
 
 /**
@@ -8,7 +9,7 @@
  *
  * @author ruoyi
  */
-public interface ISysConfigService
+public interface ISysConfigService extends IConfigService
 {
     /**
      * 鏌ヨ鍙傛暟閰嶇疆淇℃伅
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/EquipmentinfoServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/EquipmentinfoServiceImpl.java
index 078313f..f17030a 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/EquipmentinfoServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/EquipmentinfoServiceImpl.java
@@ -2,10 +2,11 @@
 
 import java.util.List;
 
+import com.ruoyi.common.core.domain.DingTalkReqVo;
+import com.ruoyi.common.core.service.IDingTalkService;
 import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.spring.SpringUtils;
 import com.ruoyi.system.domain.ReportReqVo;
-import com.smartor.domain.DingTalkReqVo;
-import com.smartor.service.DingTalkService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.ruoyi.system.mapper.EquipmentinfoMapper;
@@ -23,8 +24,7 @@
     @Autowired
     private EquipmentinfoMapper equipmentinfoMapper;
 
-    @Autowired
-    private DingTalkService dingTalkService;
+
 
 
     /**
@@ -119,6 +119,7 @@
             dingTalkReqVo.setContents(null);
             dingTalkReqVo.setDeptId(Long.valueOf(reportReqVo.getDealDeptID()));
             dingTalkReqVo.setUserId(reportReqVo.getDealPersionDingNO());
+            IDingTalkService dingTalkService = SpringUtils.getBean(IDingTalkService.class);
             aBoolean = dingTalkService.sendNotification(dingTalkReqVo);
         }
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SmsRecordsServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SmsRecordsServiceImpl.java
index d0f4049..1aad224 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SmsRecordsServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SmsRecordsServiceImpl.java
@@ -15,9 +15,8 @@
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.system.domain.SysConfig;
 import com.ruoyi.system.service.ISysConfigService;
-import com.smartor.common.LSHospTokenUtil;
-import com.smartor.domain.ServiceSubtask;
-import com.smartor.mapper.ServiceSubtaskMapper;
+import com.ruoyi.common.core.service.ISubtaskSmsService;
+import com.ruoyi.common.utils.spring.SpringUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.ObjectUtils;
@@ -41,9 +40,6 @@
 
     @Autowired
     private ISysConfigService iSysConfigService;
-
-    @Autowired
-    private ServiceSubtaskMapper serviceSubtaskMapper;
 
     @Autowired
     private ISysConfigService configService;
@@ -109,10 +105,10 @@
         List<SmsRecords> selectSmsRecordsList = smsRecordsMapper.selectSmsRecordsList(smsRecords);
         for (SmsRecords record : selectSmsRecordsList) {
             Boolean aBoolean = sendSMS(record.getOrgid(), record.getPhone(), record.getMsg());
-            ServiceSubtask serviceSubtask = new ServiceSubtask();
-            serviceSubtask.setId(record.getSubId());
-            if (aBoolean) serviceSubtask.setVisitNotice(1);
-            serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
+            if (aBoolean) {
+                ISubtaskSmsService subtaskSmsService = SpringUtils.getBean(ISubtaskSmsService.class);
+                subtaskSmsService.updateSubtaskVisitNotice(record.getSubId(), 1);
+            }
         }
 
         return true;
@@ -137,7 +133,8 @@
             }
             log.info("-----------map鐨勫�间负锛歿}", msgInfo);
 
-            String token = LSHospTokenUtil.getToken(orgid,msgInfo.get("tokenUrl"));
+            ISubtaskSmsService subtaskSmsService = SpringUtils.getBean(ISubtaskSmsService.class);
+            String token = subtaskSmsService.getLSHospToken(orgid, msgInfo.get("tokenUrl"));
             log.info("銆恠fHandlle銆戜附姘寸煭淇″彂閫侊紝鍦板潃锛歿}锛屽弬鏁帮細{}锛屾満鏋処D锛歿}", msgInfo.get("address"), orgid);
             String dxCode = getDXCode(msgInfo.get("address"), phone, content, msgInfo.get("sendPersonId"), msgInfo.get("sendPersonName"), MsgLSEnum.getHeaderByCode(msgInfo), token);
             log.info("銆恠fHandlle銆戜附姘寸煭淇″彂閫佺粨鏋滐細{}", dxCode);
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserDeptServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserDeptServiceImpl.java
index f3019b9..2502a98 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserDeptServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserDeptServiceImpl.java
@@ -4,9 +4,10 @@
 import com.ruoyi.common.core.domain.entity.SysUserDept;
 import com.ruoyi.system.mapper.SysDeptMapper;
 import com.ruoyi.system.service.ISysUserDeptService;
-import com.smartor.mapper.SysUserDeptMapper;
+import com.ruoyi.system.mapper.SysUserDeptMapper;
 import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 
 import java.util.Date;
@@ -21,6 +22,7 @@
 @Service
 public class SysUserDeptServiceImpl implements ISysUserDeptService {
     @Autowired
+    @Qualifier("sysUserDeptSystemMapper")
     private SysUserDeptMapper sysUserDeptMapper;
 
     @Autowired
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
index 9fd4e80..d242f63 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
@@ -14,17 +14,12 @@
 import com.ruoyi.system.mapper.*;
 import com.ruoyi.system.service.ISysConfigService;
 import com.ruoyi.system.service.ISysUserService;
-import com.smartor.domain.IvrLibaScriptAssort;
-import com.smartor.domain.SvyLibScriptCategory;
-import com.smartor.domain.SvyTaskVO;
-import com.smartor.domain.SysUserOrg;
-import com.smartor.mapper.IvrLibaScriptAssortMapper;
-import com.smartor.mapper.SvyLibScriptCategoryMapper;
-import com.smartor.mapper.SysUserDeptMapper;
-import com.smartor.mapper.SysUserOrgMapper;
+import com.ruoyi.common.core.service.IUserExtInfoService;
+import com.ruoyi.system.mapper.SysUserDeptMapper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -36,7 +31,7 @@
 import java.util.stream.Collectors;
 
 /**
- * 鐢ㄦ埛 涓氬姟灞傚鐞�
+ * 鐢ㄦ埛 涓氬姟灞傚锟�?
  *
  * @author ruoyi
  */
@@ -48,19 +43,12 @@
     private SysUserMapper userMapper;
 
     @Autowired
-    private SysUserOrgMapper sysUserOrgMapper;
-
-    @Autowired
     private SysDeptMapper sysDeptMapper;
 
     @Autowired
+    @Qualifier("sysUserDeptSystemMapper")
     private SysUserDeptMapper sysUserDeptMapper;
 
-    @Autowired
-    private IvrLibaScriptAssortMapper ivrLibaScriptAssortMapper;
-
-    @Autowired
-    private SvyLibScriptCategoryMapper svyLibScriptCategoryMapper;
 
     @Autowired
     private SysRoleMapper roleMapper;
@@ -102,7 +90,7 @@
     }
 
     /**
-     * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ宸插垎閰嶇敤鎴疯鑹插垪琛�
+     * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ宸插垎閰嶇敤鎴疯鑹插垪锟�?
      *
      * @param user 鐢ㄦ埛淇℃伅
      * @return 鐢ㄦ埛淇℃伅闆嗗悎淇℃伅
@@ -114,7 +102,7 @@
     }
 
     /**
-     * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ鏈垎閰嶇敤鎴疯鑹插垪琛�
+     * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ鏈垎閰嶇敤鎴疯鑹插垪锟�?
      *
      * @param user 鐢ㄦ埛淇℃伅
      * @return 鐢ㄦ埛淇℃伅闆嗗悎淇℃伅
@@ -126,9 +114,9 @@
     }
 
     /**
-     * 閫氳繃鐢ㄦ埛鍚嶆煡璇㈢敤鎴�
+     * 閫氳繃鐢ㄦ埛鍚嶆煡璇㈢敤锟�?
      *
-     * @param userName 鐢ㄦ埛鍚�
+     * @param userName 鐢ㄦ埛锟�?
      * @return 鐢ㄦ埛瀵硅薄淇℃伅
      */
     @Override
@@ -190,15 +178,15 @@
         String[] split = userName.split("&");
         SysUser sysUser = userMapper.selectUserByUserNameByCondition(split[0], split[1], null);
 
-        //鑾峰彇褰撳墠鐧婚檰浜虹殑鏈烘瀯鍜岄櫌鍖�
-        SysUserOrg sysUserOrg = new SysUserOrg();
-        sysUserOrg.setUserId(sysUser.getUserId().toString());
-        sysUserOrg.setOrgid(split[1].equals("null") ? "" : split[1]);
-        sysUserOrg.setCampusid(split[2].equals("null") ? "" : split[2]);
-        List<SysUserOrg> sysUserOrgs = sysUserOrgMapper.selectSysUserOrgList(sysUserOrg);
-        if (!CollectionUtils.isEmpty(sysUserOrgs)) {
-            sysUser.setOrgid(sysUserOrgs.get(0).getOrgid());
-            sysUser.setCampusid(sysUserOrgs.get(0).getCampusid());
+        //鑾峰彇褰撳墠鐧婚檰浜虹殑鏈烘瀯鍜岄櫌锟�?
+        IUserExtInfoService userExtInfoService = SpringUtils.getBean(IUserExtInfoService.class);
+        Map<String, String> userOrgInfo = userExtInfoService.getUserOrgInfo(
+                sysUser.getUserId().toString(),
+                split[1],
+                split[2]);
+        if (!userOrgInfo.isEmpty()) {
+            sysUser.setOrgid(userOrgInfo.get("orgid"));
+            sysUser.setCampusid(userOrgInfo.get("campusid"));
         }
 
         if (Objects.isNull(sysUser)) return sysUser;
@@ -300,40 +288,9 @@
             //鑾峰彇褰撳墠鏈烘瀯鐨勬弧鎰忓害闂鍒嗙被
             sysUser.setBelongDepts(list);
             Map<String, Object> satisfactionCategories = new HashMap<>();
-            //鑾峰彇璇煶闂鍒嗙被
-            IvrLibaScriptAssort ivrLibaScriptAssort = new IvrLibaScriptAssort();
-            ivrLibaScriptAssort.setOrgid(sysUser.getOrgid());
-            ivrLibaScriptAssort.setType("myd");
-            List<IvrLibaScriptAssort> ivrLibaScriptAssorts = ivrLibaScriptAssortMapper.selectIvrLibaScriptAssortList(ivrLibaScriptAssort);
-            List<Map<String, Object>> categoryList = new ArrayList<>();
-            if (!CollectionUtils.isEmpty(ivrLibaScriptAssorts)) {
-                for (IvrLibaScriptAssort assort : ivrLibaScriptAssorts) {
-                    Map<String, Object> map = new HashMap<>();
-                    map.put("categoryid", assort.getId());
-                    map.put("categoryName", assort.getIndexAssortName());
-                    categoryList.add(map);
-                }
-            }
-            satisfactionCategories.put("voiceCategories", categoryList);
-
-            //鑾峰彇闂嵎闂鍒嗙被
-            SvyLibScriptCategory svyLibScriptCategory = new SvyLibScriptCategory();
-            svyLibScriptCategory.setOrgid(sysUser.getOrgid());
-            svyLibScriptCategory.setType("myd");
-            List<SvyLibScriptCategory> svyLibScriptCategories = svyLibScriptCategoryMapper.selectSvyLibScriptCategoryList(svyLibScriptCategory);
-            List<Map<String, Object>> questionnaireCategorys = new ArrayList<>();
-            if (!CollectionUtils.isEmpty(svyLibScriptCategories)) {
-                for (SvyLibScriptCategory scriptCategory : svyLibScriptCategories) {
-                    Map<String, Object> map = new HashMap<>();
-                    map.put("categoryid", scriptCategory.getId());
-                    map.put("categoryName", scriptCategory.getName());
-                    questionnaireCategorys.add(map);
-                }
-            }
-            satisfactionCategories.put("questionnaireCategorys", questionnaireCategorys);
-
             //璁剧疆褰撳墠鐢ㄦ埛鐨勫0闊抽棶棰樺垎绫诲拰闂嵎闂鍒嗙被
-            sysUser.setSatisfactionCategories(satisfactionCategories);
+            IUserExtInfoService userExtInfoService3 = SpringUtils.getBean(IUserExtInfoService.class);
+            sysUser.setSatisfactionCategories(userExtInfoService3.getSatisfactionCategories(sysUser.getOrgid()));
         }
         return sysUser;
     }
@@ -346,15 +303,15 @@
         }
         SysUser sysUser = userMapper.selectUserByUserNameByCondition(split[0], split[1], split[2]);
 
-        //鑾峰彇褰撳墠鐧婚檰浜虹殑鏈烘瀯鍜岄櫌鍖�
-        SysUserOrg sysUserOrg = new SysUserOrg();
-        sysUserOrg.setUserId(sysUser.getUserId().toString());
-        sysUserOrg.setOrgid(split[1].equals("null") ? "" : split[1]);
-        sysUserOrg.setCampusid(split[3].equals("null") ? "" : split[3]);
-        List<SysUserOrg> sysUserOrgs = sysUserOrgMapper.selectSysUserOrgList(sysUserOrg);
-        if (!CollectionUtils.isEmpty(sysUserOrgs)) {
-            sysUser.setOrgid(sysUserOrgs.get(0).getOrgid());
-            sysUser.setCampusid(sysUserOrgs.get(0).getCampusid());
+        //鑾峰彇褰撳墠鐧婚檰浜虹殑鏈烘瀯鍜岄櫌锟�?
+        IUserExtInfoService userExtInfoService2 = SpringUtils.getBean(IUserExtInfoService.class);
+        Map<String, String> userOrgInfo2 = userExtInfoService2.getUserOrgInfo(
+                sysUser.getUserId().toString(),
+                split[1],
+                split[3]);
+        if (!userOrgInfo2.isEmpty()) {
+            sysUser.setOrgid(userOrgInfo2.get("orgid"));
+            sysUser.setCampusid(userOrgInfo2.get("campusid"));
         }
 
         log.info("selectUserByUserNameAndDeptId鐨剆ysUser鐨勫�间负锛歿}", sysUser);
@@ -481,7 +438,7 @@
     /**
      * 鏌ヨ鐢ㄦ埛鎵�灞炶鑹茬粍
      *
-     * @param userName 鐢ㄦ埛鍚�
+     * @param userName 鐢ㄦ埛锟�?
      * @return 缁撴灉
      */
     @Override
@@ -496,7 +453,7 @@
     /**
      * 鏌ヨ鐢ㄦ埛鎵�灞炲矖浣嶇粍
      *
-     * @param userName 鐢ㄦ埛鍚�
+     * @param userName 鐢ㄦ埛锟�?
      * @return 缁撴灉
      */
     @Override
@@ -569,7 +526,7 @@
     }
 
     /**
-     * 鏍¢獙鐢ㄦ埛鏄惁鏈夋暟鎹潈闄�
+     * 鏍¢獙鐢ㄦ埛鏄惁鏈夋暟鎹潈锟�?
      *
      * @param userId 鐢ㄦ埛id
      */
@@ -580,7 +537,7 @@
             user.setUserId(userId);
             List<SysUser> users = SpringUtils.getAopProxy(this).selectUserList(user);
             if (StringUtils.isEmpty(users)) {
-                throw new ServiceException("娌℃湁鏉冮檺璁块棶鐢ㄦ埛鏁版嵁锛�");
+                throw new ServiceException("娌℃湁鏉冮檺璁块棶鐢ㄦ埛鏁版嵁");
             }
         }
     }
@@ -596,7 +553,7 @@
     public int insertUser(SysUser user) {
         // 鏂板鐢ㄦ埛淇℃伅
         int rows = userMapper.insertUser(user);
-        //鏂板鐢ㄦ埛涓庨儴闂ㄥ叧鑱�
+        //鏂板鐢ㄦ埛涓庨儴闂ㄥ叧锟�?
 //        if (!CollectionUtils.isEmpty(user.getDepts())) {
 //            for (Long deptId : user.getDepts()) {
 //                SysUserDept sysUserDep = new SysUserDept();
@@ -661,7 +618,7 @@
         }
         // 鏂板鐢ㄦ埛宀椾綅鍏宠仈
         insertUserPost(user);
-        // 鏂板鐢ㄦ埛涓庤鑹茬鐞�
+        // 鏂板鐢ㄦ埛涓庤鑹茬锟�?
         insertUserRole(user);
         return rows;
     }
@@ -687,24 +644,24 @@
     @Transactional
     public int updateUser(SysUser user) {
         Long userId = user.getUserId();
-        // 鍒犻櫎鐢ㄦ埛涓庤鑹插叧鑱�
+        // 鍒犻櫎鐢ㄦ埛涓庤鑹插叧锟�?
         userRoleMapper.deleteUserRoleByUserId(userId);
-        // 鏂板鐢ㄦ埛涓庤鑹茬鐞�
+        // 鏂板鐢ㄦ埛涓庤鑹茬锟�?
         insertUserRole(user);
-        // 鍒犻櫎鐢ㄦ埛涓庡矖浣嶅叧鑱�
+        // 鍒犻櫎鐢ㄦ埛涓庡矖浣嶅叧锟�?
         userPostMapper.deleteUserPostByUserId(userId);
-        // 鏂板鐢ㄦ埛涓庡矖浣嶇鐞�
+        // 鏂板鐢ㄦ埛涓庡矖浣嶇锟�?
         insertUserPost(user);
         //鍒犻櫎鐢ㄦ埛涓庨儴闂ㄧ殑鍏宠仈
         Long[] ids = {user.getUserId()};
-        //鏂板鐢ㄦ埛涓庨儴闂ㄥ叧鑱�
+        //鏂板鐢ㄦ埛涓庨儴闂ㄥ叧锟�?
 //        sysUserDeptMapper.deleteSysUserDeptByIds(ids);
 //        if (!CollectionUtils.isEmpty(user.getDepts())) {
 //            for (Long deptId : user.getDepts()) {
 //                SysUserDept sysUserDep = new SysUserDept();
 //                sysUserDep.setUserId(user.getUserId());
 //                sysUserDep.setDeptId(deptId);
-//                //鏌ヨ鏄惁 宸茬粡鍏宠仈璇ラ儴闂�
+//                //鏌ヨ鏄惁 宸茬粡鍏宠仈璇ラ儴锟�?
 //                List<SysUserDept> sysUserDepts = sysUserDeptMapper.selectSysUserDeptList(sysUserDep);
 //                if (!CollectionUtils.isEmpty(sysUserDepts)) {
 //                    SysUserDept sysUserDept = sysUserDepts.get(0);
@@ -775,7 +732,7 @@
      * 鐢ㄦ埛鎺堟潈瑙掕壊
      *
      * @param userId  鐢ㄦ埛ID
-     * @param roleIds 瑙掕壊缁�
+     * @param roleIds 瑙掕壊锟�?
      */
     @Override
     @Transactional
@@ -785,7 +742,7 @@
     }
 
     /**
-     * 淇敼鐢ㄦ埛鐘舵��
+     * 淇敼鐢ㄦ埛鐘讹拷?
      *
      * @param user 鐢ㄦ埛淇℃伅
      * @return 缁撴灉
@@ -809,7 +766,7 @@
     /**
      * 淇敼鐢ㄦ埛澶村儚
      *
-     * @param userName 鐢ㄦ埛鍚�
+     * @param userName 鐢ㄦ埛锟�?
      * @param avatar   澶村儚鍦板潃
      * @return 缁撴灉
      */
@@ -832,7 +789,7 @@
     /**
      * 閲嶇疆鐢ㄦ埛瀵嗙爜
      *
-     * @param userName 鐢ㄦ埛鍚�
+     * @param userName 鐢ㄦ埛锟�?
      * @param password 瀵嗙爜
      * @return 缁撴灉
      */
@@ -858,7 +815,7 @@
     public void insertUserPost(SysUser user) {
         Long[] posts = user.getPostIds();
         if (StringUtils.isNotEmpty(posts)) {
-            // 鏂板鐢ㄦ埛涓庡矖浣嶇鐞�
+            // 鏂板鐢ㄦ埛涓庡矖浣嶇锟�?
             List<SysUserPost> list = new ArrayList<SysUserPost>(posts.length);
             for (Long postId : posts) {
                 SysUserPost up = new SysUserPost();
@@ -875,11 +832,11 @@
      * 鏂板鐢ㄦ埛瑙掕壊淇℃伅
      *
      * @param userId  鐢ㄦ埛ID
-     * @param roleIds 瑙掕壊缁�
+     * @param roleIds 瑙掕壊锟�?
      */
     public void insertUserRole(Long userId, Long[] roleIds, String orgid) {
         if (StringUtils.isNotEmpty(roleIds)) {
-            // 鏂板鐢ㄦ埛涓庤鑹茬鐞�
+            // 鏂板鐢ㄦ埛涓庤鑹茬锟�?
             List<SysUserRole> list = new ArrayList<SysUserRole>(roleIds.length);
             for (Long roleId : roleIds) {
                 SysUserRole ur = new SysUserRole();
@@ -901,7 +858,7 @@
     @Override
     @Transactional
     public int deleteUserById(Long userId) {
-        // 鍒犻櫎鐢ㄦ埛涓庤鑹插叧鑱�
+        // 鍒犻櫎鐢ㄦ埛涓庤鑹插叧锟�?
         userRoleMapper.deleteUserRoleByUserId(userId);
         // 鍒犻櫎鐢ㄦ埛涓庡矖浣嶈〃
         userPostMapper.deleteUserPostByUserId(userId);
@@ -921,9 +878,9 @@
             checkUserAllowed(new SysUser(userId));
             checkUserDataScope(userId);
         }
-        // 鍒犻櫎鐢ㄦ埛涓庤鑹插叧鑱�
+        // 鍒犻櫎鐢ㄦ埛涓庤鑹插叧锟�?
         userRoleMapper.deleteUserRole(userIds);
-        // 鍒犻櫎鐢ㄦ埛涓庡矖浣嶅叧鑱�
+        // 鍒犻櫎鐢ㄦ埛涓庡矖浣嶅叧锟�?
         userPostMapper.deleteUserPost(userIds);
         return userMapper.deleteUserByIds(userIds);
     }
@@ -939,7 +896,7 @@
     @Override
     public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName) {
         if (StringUtils.isNull(userList) || userList.size() == 0) {
-            throw new ServiceException("瀵煎叆鐢ㄦ埛鏁版嵁涓嶈兘涓虹┖锛�");
+            throw new ServiceException("瀵煎叆鐢ㄦ埛鏁版嵁涓嶈兘涓虹┖");
         }
         int successNum = 0;
         int failureNum = 0;
@@ -956,7 +913,7 @@
                     user.setCreateBy(operName);
                     this.insertUser(user);
                     successNum++;
-                    successMsg.append("<br/>" + successNum + "銆佽处鍙� " + user.getUserName() + " 瀵煎叆鎴愬姛");
+                    successMsg.append("<br/>" + successNum + "銆佽处锟�?" + user.getUserName() + " 瀵煎叆鎴愬姛");
                 } else if (isUpdateSupport) {
                     BeanValidators.validateWithException(validator, user);
                     checkUserAllowed(user);
@@ -964,14 +921,14 @@
                     user.setUpdateBy(operName);
                     this.updateUser(user);
                     successNum++;
-                    successMsg.append("<br/>" + successNum + "銆佽处鍙� " + user.getUserName() + " 鏇存柊鎴愬姛");
+                    successMsg.append("<br/>" + successNum + "璐﹀彿?" + user.getUserName() + " 鏇存柊鎴愬姛");
                 } else {
                     failureNum++;
-                    failureMsg.append("<br/>" + failureNum + "銆佽处鍙� " + user.getUserName() + " 宸插瓨鍦�");
+                    failureMsg.append("<br/>" + failureNum + "璐﹀彿" + user.getUserName() + " 宸插瓨鍦�");
                 }
             } catch (Exception e) {
                 failureNum++;
-                String msg = "<br/>" + failureNum + "銆佽处鍙� " + user.getUserName() + " 瀵煎叆澶辫触锛�";
+                String msg = "<br/>" + failureNum + "璐﹀彿" + user.getUserName() + " 瀵煎叆澶辫触";
                 failureMsg.append(msg + e.getMessage());
                 log.error(msg, e);
             }
@@ -980,7 +937,7 @@
             failureMsg.insert(0, "寰堟姳姝夛紝瀵煎叆澶辫触锛佸叡 " + failureNum + " 鏉℃暟鎹牸寮忎笉姝g‘锛岄敊璇涓嬶細");
             throw new ServiceException(failureMsg.toString());
         } else {
-            successMsg.insert(0, "鎭枩鎮紝鏁版嵁宸插叏閮ㄥ鍏ユ垚鍔燂紒鍏� " + successNum + " 鏉★紝鏁版嵁濡備笅锛�");
+            successMsg.insert(0, "鎭枩鎮紝鏁版嵁宸插叏閮ㄥ鍏ユ垚鍔燂紒鍏�" + successNum + "鏉★紝鏁版嵁濡備笅锛�");
         }
         return successMsg.toString();
     }
diff --git a/smartor/src/main/java/com/smartor/domain/BaseSmsRequest.java b/smartor/src/main/java/com/smartor/domain/BaseSmsRequest.java
index 2a659db..8b4e58c 100644
--- a/smartor/src/main/java/com/smartor/domain/BaseSmsRequest.java
+++ b/smartor/src/main/java/com/smartor/domain/BaseSmsRequest.java
@@ -30,7 +30,7 @@
     /**
      * 鐭俊妯℃澘CODE
      */
-    @ApiModelProperty(value = "妯℃澘ID")
+    @ApiModelProperty(value = "妯℃澘ID;濡傛灉鍗楀崕闄勪竴鐨勮瘽锛岃瀛楁灏辨槸content")
     private String templateCode;
 
 
diff --git a/smartor/src/main/java/com/smartor/domain/DingTalkReqVo.java b/smartor/src/main/java/com/smartor/domain/DingTalkReqVo.java
deleted file mode 100644
index 30c7325..0000000
--- a/smartor/src/main/java/com/smartor/domain/DingTalkReqVo.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package com.smartor.domain;
-
-import com.ruoyi.common.core.domain.BaseEntity;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.util.List;
-import java.util.concurrent.ConcurrentHashMap;
-
-/**
- * 閽夐拤娑堟伅鍙戦��
- *
- * @author ls
- * @date 2023-05-25
- */
-@Data
-@ApiModel(value = "DingTalkReqVo", description = "閽夐拤娑堟伅鍙戦��")
-public class DingTalkReqVo extends BaseEntity {
-
-    /**
-     * 鍙戦�佸唴瀹�
-     */
-    @ApiModelProperty(value = "鍙戦�佸唴瀹�")
-    private List<ConcurrentHashMap<String, String>> contents;
-
-    /**
-     * 鐢ㄦ埛閽夐拤鍙�
-     */
-    @ApiModelProperty(value = "鐢ㄦ埛鎵嬫満鍙�")
-    private String number;
-
-    /**
-     * 閮ㄩ棬ID
-     */
-    @ApiModelProperty(value = "閮ㄩ棬ID")
-    private Long deptId;
-
-    /**
-     * 鍙戦�佹秷鎭殑鏍囬
-     */
-    @ApiModelProperty(value = "鍙戦�佹秷鎭殑鏍囬")
-    private String title;
-
-    /**
-     * 璺宠浆url
-     */
-    @ApiModelProperty(value = "璺宠浆url")
-    private String url;
-    /**
-     * 璺宠浆url
-     */
-    @ApiModelProperty(value = "璺宠浆url")
-    private String userId;
-}
diff --git a/smartor/src/main/java/com/smartor/domain/IvrLibaScriptTargetoption.java b/smartor/src/main/java/com/smartor/domain/IvrLibaScriptTargetoption.java
index ab03e8d..d31231b 100644
--- a/smartor/src/main/java/com/smartor/domain/IvrLibaScriptTargetoption.java
+++ b/smartor/src/main/java/com/smartor/domain/IvrLibaScriptTargetoption.java
@@ -54,6 +54,12 @@
     private Long scriptid;
 
     /**
+     * 榛樿閫夐」锛�1 鍚�     2 鏄�
+     */
+    @ApiModelProperty("榛樿閫夐」锛�1 鍚�     2 鏄�")
+    private Long defaultValue;
+
+    /**
      * $column.columnComment
      */
     @ApiModelProperty("涓婚敭")
diff --git a/smartor/src/main/java/com/smartor/domain/IvrLibaTemplateTargetoption.java b/smartor/src/main/java/com/smartor/domain/IvrLibaTemplateTargetoption.java
index aae705a..26ea601 100644
--- a/smartor/src/main/java/com/smartor/domain/IvrLibaTemplateTargetoption.java
+++ b/smartor/src/main/java/com/smartor/domain/IvrLibaTemplateTargetoption.java
@@ -263,4 +263,10 @@
     @Excel(name = "寮傚父閫夐」锛�1鍚︼紙榛樿锛�    2鏄�")
     @ApiModelProperty(value = "寮傚父閫夐」锛�1鍚︼紙榛樿锛�    2鏄�")
     private Long isException;
+
+    /**
+     * 榛樿閫夐」锛�1 鍚�     2 鏄�
+     */
+    @ApiModelProperty("榛樿閫夐」锛�1 鍚︼紙榛樿锛�     2 鏄�")
+    private Long defaultValue;
 }
diff --git a/smartor/src/main/java/com/smartor/domain/IvrTaskTemplateTargetoption.java b/smartor/src/main/java/com/smartor/domain/IvrTaskTemplateTargetoption.java
index 2202367..e67492c 100644
--- a/smartor/src/main/java/com/smartor/domain/IvrTaskTemplateTargetoption.java
+++ b/smartor/src/main/java/com/smartor/domain/IvrTaskTemplateTargetoption.java
@@ -285,4 +285,10 @@
      */
     @ApiModelProperty(value = "鏈嶅姟鐨勫悕绉�")
     private String sendTaskname;
+
+    /**
+     * 榛樿閫夐」锛�1 鍚�     2 鏄�
+     */
+    @ApiModelProperty("榛樿閫夐」锛�1 鍚�     2 鏄�")
+    private Long defaultValue;
 }
diff --git a/smartor/src/main/java/com/smartor/domain/PatMedInhosp.java b/smartor/src/main/java/com/smartor/domain/PatMedInhosp.java
index 921c71e..80119b4 100644
--- a/smartor/src/main/java/com/smartor/domain/PatMedInhosp.java
+++ b/smartor/src/main/java/com/smartor/domain/PatMedInhosp.java
@@ -79,6 +79,12 @@
     private String hospitaldistrictcode;
 
     /**
+     * 闄㈠尯缂栧彿闆嗗悎
+     */
+    @ApiModelProperty(value = "闄㈠尯缂栧彿闆嗗悎")
+    private List<String> hospitaldistrictcodeList;
+
+    /**
      * 闄㈠尯鍚嶇О
      */
     @ApiModelProperty(value = "闄㈠尯鍚嶇О")
@@ -118,6 +124,11 @@
      */
     @ApiModelProperty(value = "鍏ラ櫌绉戝浠g爜")
     private String deptcode;
+    /**
+     * 鍏ラ櫌绉戝浠g爜
+     */
+    @ApiModelProperty(value = "鍏ラ櫌绉戝浠g爜闆嗗悎")
+    private List<String> deptcodeList;
 
     /**
      * 鍏ラ櫌绉戝鍚嶇О
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskCountReq.java b/smartor/src/main/java/com/smartor/domain/ServiceSubtaskCountReq.java
index ce8c398..71d72c3 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskCountReq.java
+++ b/smartor/src/main/java/com/smartor/domain/ServiceSubtaskCountReq.java
@@ -31,11 +31,11 @@
     @ApiModelProperty(value = "寮傚父棰勮锛�0缁胯壊锛�1绾㈣壊锛�2榛勮壊")
     private Integer isabnormal;
 
-    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
     @ApiModelProperty(value = "寮�濮嬫椂闂�")
     private Date startTime;
 
-    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
     @ApiModelProperty(value = "缁撴潫鏃堕棿")
     private Date endTime;
 
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskStatistic.java b/smartor/src/main/java/com/smartor/domain/ServiceSubtaskStatistic.java
index f134da8..69e9f56 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskStatistic.java
+++ b/smartor/src/main/java/com/smartor/domain/ServiceSubtaskStatistic.java
@@ -118,6 +118,9 @@
     @Excel(name = " 棣栨闅忚澶辫触 ")
     private Long followUpFail = 0L;
 
+    @ApiModelProperty(value = "鏃犻渶闅忚璇︽儏")
+    private List<ServiceSubtask> nonFollowUpInfo;
+
     @ApiModelProperty(value = "棣栨搴旈殢璁胯鎯�")
     private List<ServiceSubtask> needFollowUpInfo;
 
diff --git a/smartor/src/main/java/com/smartor/domain/SvyLibScriptOption.java b/smartor/src/main/java/com/smartor/domain/SvyLibScriptOption.java
index 0bb54b5..4c5960b 100644
--- a/smartor/src/main/java/com/smartor/domain/SvyLibScriptOption.java
+++ b/smartor/src/main/java/com/smartor/domain/SvyLibScriptOption.java
@@ -208,5 +208,11 @@
     @ApiModelProperty(value = "寮傚父閫夐」锛�1鍚︼紙榛樿锛�    2鏄�")
     private Integer isException;
 
+    /**
+     * 榛樿閫夐」锛�1 鍚�     2 鏄�
+     */
+    @ApiModelProperty("榛樿閫夐」锛�1 鍚�     2 鏄�")
+    private Long defaultValue;
+
 }
 
diff --git a/smartor/src/main/java/com/smartor/domain/SvyLibTemplateTargetoption.java b/smartor/src/main/java/com/smartor/domain/SvyLibTemplateTargetoption.java
index 2e4ae8b..c4f98a4 100644
--- a/smartor/src/main/java/com/smartor/domain/SvyLibTemplateTargetoption.java
+++ b/smartor/src/main/java/com/smartor/domain/SvyLibTemplateTargetoption.java
@@ -277,10 +277,10 @@
      */
     @ApiModelProperty(value = "鏈嶅姟鐨勫悕绉�")
     private String sendTaskname;
-//
-//    /**
-//     * 寮傚父閫夐」锛�1鍚︼紙榛樿锛�    2鏄�
-//     */
-//    @ApiModelProperty(value = "寮傚父閫夐」锛�1鍚︼紙榛樿锛�    2鏄�")
-//    private Integer isException;
+
+    /**
+     * 榛樿閫夐」锛�1 鍚︼紙榛樿锛�     2 鏄�
+     */
+    @ApiModelProperty("榛樿閫夐」锛�1 鍚︼紙榛樿锛�     2 鏄�")
+    private Long defaultValue;
 }
diff --git a/smartor/src/main/java/com/smartor/domain/SvyTaskTemplateTargetoption.java b/smartor/src/main/java/com/smartor/domain/SvyTaskTemplateTargetoption.java
index c8063c3..76e3cf5 100644
--- a/smartor/src/main/java/com/smartor/domain/SvyTaskTemplateTargetoption.java
+++ b/smartor/src/main/java/com/smartor/domain/SvyTaskTemplateTargetoption.java
@@ -258,10 +258,10 @@
      */
     @ApiModelProperty(value = "鏄惁鏄敤鎴烽�夋嫨鐨勯�夐」")
     private Boolean isUserOperation = false;
-
-//    /**
-//     * 寮傚父閫夐」锛�1鍚︼紙榛樿锛�    2鏄�
-//     */
-//    @ApiModelProperty(value = "寮傚父閫夐」锛�1鍚︼紙榛樿锛�    2鏄�")
-//    private Integer isException;
+    
+    /**
+     * 榛樿閫夐」锛�1 鍚�     2 鏄�
+     */
+    @ApiModelProperty("榛樿閫夐」锛�1 鍚�     2 鏄�")
+    private Long defaultValue;
 }
diff --git a/smartor/src/main/java/com/smartor/service/DingTalkService.java b/smartor/src/main/java/com/smartor/service/DingTalkService.java
index 00490ee..cc7313f 100644
--- a/smartor/src/main/java/com/smartor/service/DingTalkService.java
+++ b/smartor/src/main/java/com/smartor/service/DingTalkService.java
@@ -1,6 +1,7 @@
 package com.smartor.service;
 
-import com.smartor.domain.DingTalkReqVo;
+import com.ruoyi.common.core.domain.DingTalkReqVo;
+import com.ruoyi.common.core.service.IDingTalkService;
 import com.smartor.domain.HeCategory;
 import com.taobao.api.ApiException;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -13,7 +14,7 @@
  * @author smartor
  * @date 2023-03-04
  */
-public interface DingTalkService {
+public interface DingTalkService extends IDingTalkService {
     /**
      * 鍙戦�侀拤閽夋秷鎭�
      *
diff --git a/smartor/src/main/java/com/smartor/service/IServiceExternalService.java b/smartor/src/main/java/com/smartor/service/IServiceExternalService.java
index d55abb9..33d169d 100644
--- a/smartor/src/main/java/com/smartor/service/IServiceExternalService.java
+++ b/smartor/src/main/java/com/smartor/service/IServiceExternalService.java
@@ -1,7 +1,9 @@
 package com.smartor.service;
 
 import cn.hutool.core.bean.BeanUtil;
+import com.ruoyi.common.core.domain.entity.SysUser;
 import com.smartor.domain.ExternalDept;
+import com.smartor.domain.PatArchive;
 import com.smartor.domain.ServiceSubtaskDetail;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -130,4 +132,6 @@
      * 妫�鏌ユ姤鍛婃湇鍔�
      */
     public Boolean addInspectBGService(Map dataMap);
+
+    public Map<String, Object> query360PatInfolwl(Long patid, SysUser sysUser);
 }
diff --git a/smartor/src/main/java/com/smartor/service/IServiceSubtaskService.java b/smartor/src/main/java/com/smartor/service/IServiceSubtaskService.java
index 4bf23c9..c92c0a9 100644
--- a/smartor/src/main/java/com/smartor/service/IServiceSubtaskService.java
+++ b/smartor/src/main/java/com/smartor/service/IServiceSubtaskService.java
@@ -132,6 +132,7 @@
     public List<ServiceSubtaskCount> getSfFzInfoEveryMonth(ServiceSubtaskCountReq serviceSubtaskCountReq);
 
     public List<ServiceSubtaskStatistic> getSfStatistics(ServiceSubtaskCountReq serviceSubtaskCountReq);
+
     //瀵煎嚭闅忚
     public List<ServiceSubtaskStatistic> getSfStatisticsExport(ServiceSubtaskCountReq serviceSubtaskCountReq);
 
@@ -147,7 +148,7 @@
 
     public List<PatArchiveSrmVO> sendMsgTemplate(List<PatArchiveSrmVO> patArchiveSrmVOS);
 
-    public List<ServiceSubtaskDiagname> convertToDiagnameList(List<ServiceSubtask> subtaskList) ;
+    public List<ServiceSubtaskDiagname> convertToDiagnameList(List<ServiceSubtask> subtaskList);
 
     public Map<String, Object> getCurrentUserServiceSubtaskCount(ServiceSubtaskEntity entity);
 
@@ -159,4 +160,13 @@
      * @return noContinueCount銆丆ontinueCount 鍙� detail 鍒楄〃
      */
     Map<String, Object> getContinueNurseCount(ServiceSubtaskCotinueCountVO vo);
-    }
+
+    /**
+     * 璁剧疆澶辫触浠诲姟榛樿鍊�,骞跺皢澶辫触浠诲姟閲嶆柊缃负鎴愬姛
+     * <p>
+     * *@param failDay   (澶辫触澶╂暟锛氳窛绂诲綋鍓嶆棩鏈熷け璐ュぉ鏁�)
+     *
+     * @return
+     */
+    public void setFailSubTaskDefalutVal(Long failDay);
+}
diff --git a/smartor/src/main/java/com/smartor/service/impl/DingTalkServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/DingTalkServiceImpl.java
index 69303b5..7a61278 100644
--- a/smartor/src/main/java/com/smartor/service/impl/DingTalkServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/DingTalkServiceImpl.java
@@ -12,8 +12,8 @@
 import com.dingtalk.api.response.OapiMessageCorpconversationAsyncsendV2Response;
 import com.dingtalk.api.response.OapiUserListidResponse;
 import com.dingtalk.api.response.OapiV2UserGetbymobileResponse;
+import com.ruoyi.common.core.domain.DingTalkReqVo;
 import com.ruoyi.common.utils.StringUtils;
-import com.smartor.domain.DingTalkReqVo;
 import com.smartor.service.DingTalkService;
 import com.taobao.api.ApiException;
 import lombok.extern.log4j.Log4j;
diff --git a/smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
index 4e3ffb2..26ceb31 100644
--- a/smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
@@ -85,6 +85,16 @@
      */
     @Override
     public List<PatMedInhosp> selectPatMedInhospList(PatMedInhosp patMedInhosp) {
+        if (patMedInhosp.getCry() == 0) {
+            patMedInhosp.setDeptcodeList(patMedInhosp.getLeaveldeptcodes());
+            patMedInhosp.setHospitaldistrictcodeList(patMedInhosp.getLeavehospitaldistrictcodes());
+            patMedInhosp.setLeaveldeptcodes(null);
+            patMedInhosp.setLeavehospitaldistrictcodes(null);
+            patMedInhosp.setInhospstate("0");
+        } else if (patMedInhosp.getCry() == 1) {
+            patMedInhosp.setInhospstate("1");
+        }
+
         List<PatMedInhosp> patMedInhospList = patMedInhospMapper.selectPatMedInhospList(patMedInhosp);
         for (PatMedInhosp patMedInhosp1 : patMedInhospList) {
             String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid());
diff --git a/smartor/src/main/java/com/smartor/service/impl/PatMedOuthospServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/PatMedOuthospServiceImpl.java
index b0e83b2..97496b2 100644
--- a/smartor/src/main/java/com/smartor/service/impl/PatMedOuthospServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/PatMedOuthospServiceImpl.java
@@ -76,6 +76,11 @@
         PatMedOuthospQueryReq patMedOuthospQueryReq = DtoConversionUtils.sourceToTarget(patMedOuthosp, PatMedOuthospQueryReq.class);
         patMedOuthospQueryReq.setBeginAdmitdate(patMedOuthosp.getBeginTime());
         patMedOuthospQueryReq.setEndAdmitdate(patMedOuthosp.getEndTime());
+        if(!CollectionUtils.isEmpty(patMedOuthosp.getDeptcodes())) {
+            String result = String.join(",",   patMedOuthosp.getDeptcodes());
+            patMedOuthospQueryReq.setDeptcode(result);
+        }
+
         List<PatMedOuthosp> patMedOuthospQueryResps = patMedOuthospMapper.callSpQueryOuthosp(patMedOuthospQueryReq);
         if (patMedOuthosp.getPageNum() != null) {
             for (PatMedOuthosp patMedOuthosp1 : patMedOuthospQueryResps) {
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java
index aab600e..f58bb00 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java
@@ -7,6 +7,7 @@
 import com.ruoyi.common.core.domain.entity.SysUserDept;
 import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.exception.base.BaseException;
+import com.ruoyi.common.utils.AesUtils;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.DtoConversionUtils;
 import com.ruoyi.common.utils.StringUtils;
@@ -24,6 +25,8 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
@@ -1855,6 +1858,44 @@
         return true;
     }
 
+    @Override
+    public Map<String, Object> query360PatInfolwl(Long patid, SysUser sysUser) {
+        Map<String, Object> result = new HashMap<>();
+        PatArchive pa = patArchiveMapper.selectPatArchiveByPatid(patid);
+        if (pa.getPatientno() == null) {
+            result.put("url", null);
+            result.put("error", "鎮h�呯紪鍙蜂负绌�");
+            return result;
+        }
+
+        StringBuffer sbf = new StringBuffer("http://cfdata.nhyfy.cn/cfdata/h360/patient-summary?");
+        sbf.append("referer=thirdparty");
+        sbf.append("&encode=1");
+        sbf.append("&patientMainIndexNum=" + AesUtils.encrypt(pa.getPatientno()));
+        sbf.append("&workId=" + AesUtils.encrypt(sysUser.getUserName()));
+        sbf.append("&workName=" + AesUtils.encrypt(sysUser.getNickName()));
+        sbf.append("&hisOrgCode=" + AesUtils.encrypt("20001001"));
+        sbf.append("&hisOrgName=" + AesUtils.encrypt("鍗楀崕澶у闄勫睘绗竴鍖婚櫌"));
+        sbf.append("&hisHosCode=" + AesUtils.encrypt("30001002"));
+        sbf.append("&hisHosName=" + AesUtils.encrypt("鍗楀崕澶у闄勫睘绗竴鍖婚櫌"));
+        String url360 = null;
+        try {
+            url360 = URLEncoder.encode(sbf.toString(), "UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            throw new RuntimeException(e);
+        }
+
+        StringBuffer stringBuffer = new StringBuffer("http://cfdata.nhyfy.cn/cfdata/login/nologin?");
+        //accountNo瀵规帴浜轰笉缁欙紝鍏堢┖鐫�---------------------------------------------------------------
+        stringBuffer.append("accountNo=");
+        stringBuffer.append("&source=third");
+        stringBuffer.append("&redirectUrl=" + url360);
+
+        result.put("url", stringBuffer.toString());
+        result.put("error", null);
+        return result;
+    }
+
     private Boolean getType(String type, Map dataMap) {
         switch (type) {
             case "BR_DA_DangAnJL":
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java
index fa6a9d7..e400628 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java
@@ -225,17 +225,16 @@
                         String professionalTitleName = getStringValue(diagnosisMap, "professionalTitleName");
                         if (professionalTitleName.contains("鍖诲笀")) {
                             sysUser.setUserType("鍖荤敓");
-                            sysUser.setSearchscope("1");
                         }
                         if (professionalTitleName.contains("鎶�")) {
                             sysUser.setUserType("鎶ゅ+");
-                            sysUser.setSearchscope("2");
                         }
                         sysUser.setTitle(getStringValue(diagnosisMap, "professionalTitleName"));
                     }
                 }
             }
-
+            //濡傛灉鐢ㄦ埛鐨勬偅鑰呰寖鍥翠负绌猴紝鍒欓粯璁や负0
+            if (StringUtils.isEmpty(sysUser.getSearchscope())) sysUser.setSearchscope("0");
             sysUser.setPhonenumber(getStringValue(dataItem, "telephone"));
             sysUser.setUserCode(getStringValue(dataItem, "jobNumber"));
             //璁剧疆鎬у埆
@@ -250,12 +249,13 @@
             sysUser.setCreateBy("admin");
             sysUser.setCreateBy("admin");
             sysUser.setOrgid("" + getLongValue(dataItem, "orgId"));
-//            sysUser.setCampusid("" + getLongValue(dataItem, "cmpusId"));
             BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
             sysUser.setPassword(passwordEncoder.encode(userPwd));
-
             SysUser sysUser1 = sysUser2Mapper.selectUserByUserName(sysUser.getUserName());
             if (ObjectUtils.isNotEmpty(sysUser1)) {
+                //鐢变汉宸ョ淮鎶ょ殑瀛楁鏄笉闇�瑕佹洿鏂扮殑
+                sysUser.setSearchscope(null);
+                sysUser.setPassword(null);
                 sysUser.setUserId(sysUser1.getUserId());
                 sysUser2Mapper.updateUser(sysUser);
             } else {
@@ -708,6 +708,7 @@
         patMedInhosp.setNurseId(dto.getChiefNurseId() == null ? "" : dto.getChiefNurseId().toString());
         patMedInhosp.setNurseName(dto.getChiefNurseName());
         patMedInhosp.setSerialnum(dto.getHealthcareRecordNo());
+        patMedInhosp.setInhospno(dto.getHealthcareRecordNo());
         patMedInhosp.setFuflag("1");
         if (StringUtils.isNotEmpty(patArchive.getNotrequiredFlag()) && patArchive.getNotrequiredFlag().equals("1"))
             patMedInhosp.setFuflag("0");
@@ -791,7 +792,8 @@
 
     private PatArchive buildPatientArchive(ServiceSLTDInhospResDTO dto) {
         PatArchive patArchive = new PatArchive();
-        patArchive.setPatientno(dto.getPatientId() == null ? null : String.valueOf(dto.getPatientId()));
+        patArchive.setPatientno(dto.getMedicalRecordNo() == null ? null : String.valueOf(dto.getMedicalRecordNo()));
+        patArchive.setPatidHis(dto.getPatientId() == null ? null : String.valueOf(dto.getPatientId()));
         patArchive.setIdcardno(StringUtils.isEmpty(dto.getIdCardNo()) ? "" + dto.getMedicalCardId() : dto.getIdCardNo().trim());
         patArchive.setName(dto.getPatientName());
         patArchive.setSourcefrom(2L);
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java
index dc0931c..6af155d 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java
@@ -197,7 +197,7 @@
             String[] split = key.split("-");
             //鍏堝垽鏂紝鏄笉鏄綋鍓嶆彁浜や汉鐨勶紝涓嶆槸褰撳墠鎻愪氦浜虹殑锛岃烦杩�
             try {
-                if (ObjectUtils.isNotEmpty(split[0]) && ObjectUtils.isNotEmpty(split[1]) && !Long.valueOf(split[0]).equals(pid) && !Long.valueOf(split[1]).equals(tid) && !Long.valueOf(split[2]).equals(subid)) {
+                if (ObjectUtils.isNotEmpty(split[0]) && ObjectUtils.isNotEmpty(split[1]) && !Long.valueOf(split[0]).equals(pid) && !Long.valueOf(split[1]).equals(tid) && !Objects.isNull(split[2]) && !Long.valueOf(split[2]).equals(subid)) {
                     continue;
                 }
             } catch (Exception e) {
@@ -238,7 +238,7 @@
 
                         if (svyTaskTemplateScriptVO.getSort() != null && svyTaskTemplateScriptVO.getSort().equals(nextScriptno)) {
 //                            log.error("svyTaskTemplateScriptVO鐨勫�间负锛歿}", svyTaskTemplateScriptVO);
-                            Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, Long.valueOf(split[1]), Long.valueOf(split[0]), Long.valueOf(split[2]));
+                            Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, Long.valueOf(split[1]), Long.valueOf(split[0]), Objects.isNull(split[2]) ? null : Long.valueOf(split[2]));
                             log.error("nextScriptNo鐨勪俊鎭负锛歿}", map.get("nextScriptNo"));
                             if (!Objects.isNull(map.get("nextScriptNo")))
                                 nextScriptno = Long.valueOf(map.get("nextScriptNo"));
@@ -281,7 +281,7 @@
                         ivrTaskTemplateScriptVO.setIvrTaskScriptTargetoptionList(ivrTaskTemplateTargetoptions);
 
                         if (ivrTaskTemplateScriptVO.getSort() != null && Long.valueOf(ivrTaskTemplateScriptVO.getSort()).equals(nextScriptno)) {
-                            Map<String, String> map = setSFInfo(ivrTaskTemplateScriptVO, Long.valueOf(split[1]), Long.valueOf(split[0]), Long.valueOf(split[2]));
+                            Map<String, String> map = setSFInfo(ivrTaskTemplateScriptVO, Long.valueOf(split[1]), Long.valueOf(split[0]), Objects.isNull(split[2]) ? null : Long.valueOf(split[2]));
                             log.error("----nextScriptNo2鐨勪俊鎭负锛歿}", map.get("nextScriptNo"));
                             if (!Objects.isNull(map.get("nextScriptNo")))
                                 nextScriptno = Long.valueOf(map.get("nextScriptNo"));
@@ -354,7 +354,7 @@
                         for (SvyTaskTemplateScriptVO svyTaskTemplateScriptVO : cacheList) {
                             if (svyTaskTemplateScriptVO.getSort() == 1L) {
                                 //璇存槑鏄涓�棰�
-                                List<SvyTaskTemplateTargetoption> svyTaskTemplateTargetoptions = cacheList.get(0).getSvyTaskTemplateTargetoptions();
+                                List<SvyTaskTemplateTargetoption> svyTaskTemplateTargetoptions = svyTaskTemplateScriptVO.getSvyTaskTemplateTargetoptions();
                                 svyTaskTemplateScriptVO.setSvyTaskTemplateTargetoptions(svyTaskTemplateTargetoptions);
                                 Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, tid, pid, subid);
                                 if (map == null) continue;
@@ -399,7 +399,7 @@
                         for (IvrTaskTemplateScriptVO ivrTaskTemplateScriptVO : cacheList) {
                             if (ivrTaskTemplateScriptVO.getSort() != null && ivrTaskTemplateScriptVO.getSort() == 1L) {
                                 //璇存槑鏄涓�棰�
-                                List<IvrTaskTemplateTargetoption> ivrTaskTemplateTargetoptions = cacheList.get(0).getIvrTaskScriptTargetoptionList();
+                                List<IvrTaskTemplateTargetoption> ivrTaskTemplateTargetoptions = ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList();
                                 ivrTaskTemplateScriptVO.setIvrTaskScriptTargetoptionList(ivrTaskTemplateTargetoptions);
                                 //瀹冧咯閮芥槸ivr_task_templatescript_id,鎵�浠ヨ繖閲岄渶瑕佽缃竴涓�
                                 ivrTaskTemplateScriptVO.setId(ivrTaskTemplateScriptVO.getScriptID());
@@ -1091,7 +1091,7 @@
         ServiceSubtaskEntity serviceSubtaskVO = new ServiceSubtaskEntity();
         serviceSubtaskVO.setTaskid(taskid);
         serviceSubtaskVO.setPatid(patid);
-        serviceSubtaskVO.setPatid(subid);
+        serviceSubtaskVO.setSubId(subid);
         List<ServiceSubtask> selectServiceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO);
 
         String score = "0";
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
index 4ff5af9..3cf792e 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
@@ -10,8 +10,11 @@
 import com.ruoyi.common.dx.MessageSend;
 import com.ruoyi.common.exception.base.BaseException;
 import com.ruoyi.common.utils.*;
+import com.ruoyi.common.core.service.IConfigService;
+import com.ruoyi.common.utils.spring.SpringUtils;
 import com.smartor.common.FtpService;
 import com.smartor.config.PhoneUtils;
+import com.smartor.domain.DTO.ServiceSubtaskDetailDTO;
 import com.smartor.domain.*;
 import com.smartor.domain.VO.ServiceSubtaskCotinueCountVO;
 import com.smartor.domain.entity.ServiceSubtaskEntity;
@@ -97,6 +100,9 @@
 
     @Autowired
     private IIvrTaskTemplateScriptService iIvrTaskTemplateScriptService;
+
+    @Autowired
+    private IIvrTaskTemplateTargetoptionService iIvrTaskTemplateTargetoptionService;
 
     @Autowired
     private IServiceOutPathService iServiceOutPathService;
@@ -2679,6 +2685,8 @@
             serviceSubtaskStatistic.setDrname(serviceSubtaskList.get(0).getDrname());
             //鍑洪櫌浜烘
             serviceSubtaskStatistic.setDischargeCount(serviceSubtaskList.size());
+            //鏃犻渶闅忚璇︽儏
+            List<ServiceSubtask> nonFollowUpInfo = new ArrayList<>();
             //璁板綍杩囨护鎮h�呰鎯�
             List<ServiceSubtask> filterServiceSubtasks = new ArrayList<>();
             //璁板綍棣栨搴旈殢璁胯鎯�
@@ -2715,6 +2723,7 @@
                 //鏃犻渶闅忚浜烘
                 if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 4) {
                     serviceSubtaskStatistic.setNonFollowUp(serviceSubtaskStatistic.getNonFollowUp() + 1L);
+                    nonFollowUpInfo.add(serviceSubtask);
                     if (serviceSubtask.getTaskSituation() != null && serviceSubtask.getTaskSituation() == 6) {
                         serviceSubtaskStatistic.setFilterCount(serviceSubtaskStatistic.getFilterCount() + 1L);
                         filterServiceSubtasks.add(serviceSubtask);
@@ -2893,6 +2902,8 @@
                 }
             }
             serviceSubtaskStatistic.setFilterCountList(filterServiceSubtasks);
+            //璁板綍鏃犻渶闅忚璇︽儏
+            serviceSubtaskStatistic.setNonFollowUpInfo(nonFollowUpInfo);
             //璁板綍棣栨搴旈殢璁胯鎯�
             serviceSubtaskStatistic.setNeedFollowUpInfo(needFollowUpInfo);
             //璁板綍棣栨寰呴殢璁胯鎯�
@@ -2945,6 +2956,8 @@
         serviceSubtaskStatistic.setDrname(serviceSubtaskList.get(0).getDrname());
         //鍑洪櫌浜烘
         serviceSubtaskStatistic.setDischargeCount(serviceSubtaskList.size());
+        //鏃犻渶闅忚璇︽儏
+        List<ServiceSubtask> nonFollowUpInfo = new ArrayList<>();
         //璁板綍杩囨护鎮h�呰鎯�
         List<ServiceSubtask> filterServiceSubtasks = new ArrayList<>();
         //璁板綍棣栨搴旈殢璁胯鎯�
@@ -2966,6 +2979,7 @@
             //鏃犻渶闅忚浜烘
             if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 4) {
                 serviceSubtaskStatistic.setNonFollowUp(serviceSubtaskStatistic.getNonFollowUp() + 1L);
+                nonFollowUpInfo.add(serviceSubtask);
                 if (serviceSubtask.getTaskSituation() != null && serviceSubtask.getTaskSituation() == 6) {
                     serviceSubtaskStatistic.setFilterCount(serviceSubtaskStatistic.getFilterCount() + 1L);
                     filterServiceSubtasks.add(serviceSubtask);
@@ -3071,6 +3085,8 @@
             }
         }
         serviceSubtaskStatistic.setFilterCountList(filterServiceSubtasks);
+        //璁板綍鏃犻渶闅忚璇︽儏
+        serviceSubtaskStatistic.setNonFollowUpInfo(nonFollowUpInfo);
         //璁板綍棣栨搴旈殢璁胯鎯�
         serviceSubtaskStatistic.setNeedFollowUpInfo(needFollowUpInfo);
         //璁板綍棣栨寰呴殢璁胯鎯�
@@ -3107,6 +3123,8 @@
         serviceSubtaskStatistic.setDrname(serviceSubtaskList.get(0).getDrname());
         //鍑洪櫌浜烘
         serviceSubtaskStatistic.setDischargeCount(serviceSubtaskList.size());
+        //鏃犻渶闅忚璇︽儏
+        List<ServiceSubtask> nonFollowUpInfo = new ArrayList<>();
         //璁板綍杩囨护鎮h�呰鎯�
         List<ServiceSubtask> filterServiceSubtasks = new ArrayList<>();
 
@@ -3129,6 +3147,7 @@
             //鏃犻渶闅忚浜烘
             if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 4) {
                 serviceSubtaskStatistic.setNonFollowUp(serviceSubtaskStatistic.getNonFollowUp() + 1L);
+                nonFollowUpInfo.add(serviceSubtask);
                 if (serviceSubtask.getTaskSituation() != null && serviceSubtask.getTaskSituation() == 6) {
                     serviceSubtaskStatistic.setFilterCount(serviceSubtaskStatistic.getFilterCount() + 1L);
                     filterServiceSubtasks.add(serviceSubtask);
@@ -3234,6 +3253,8 @@
             }
         }
         serviceSubtaskStatistic.setFilterCountList(filterServiceSubtasks);
+        //璁板綍鏃犻渶闅忚璇︽儏
+        serviceSubtaskStatistic.setNonFollowUpInfo(nonFollowUpInfo);
         //璁板綍鍐嶆搴旈殢璁胯鎯�
         serviceSubtaskStatistic.setNeedFollowUpAgainInfo(needFollowUpAgainInfo);
         //璁板綍鍐嶆寰呴殢璁胯鎯�
@@ -4075,4 +4096,221 @@
         result.put("璇︽儏", detail);
         return result;
     }
+
+    /**
+     * 璁剧疆澶辫触浠诲姟榛樿鍊�,骞跺皢澶辫触浠诲姟閲嶆柊缃负鎴愬姛
+     *
+     * @param failDay (澶辫触澶╂暟锛氳窛绂诲綋鍓嶆棩鏈熷け璐ュぉ鏁�)
+     * @return
+     */
+    @Override
+    public void setFailSubTaskDefalutVal(Long failDay) {
+        //1.鍏堝幓sys_config涓紝鑾峰彇鍝簺绉戝鎴栫梾鍖洪渶瑕侀粯璁ら棶鍗烽粯璁ゅ��
+        IConfigService configService = SpringUtils.getBean(IConfigService.class);
+        String deptConfigValue = configService.selectConfigByKey("hosp.default.dept");
+        String wardConfigValue = configService.selectConfigByKey("hosp.default.ward");
+        List<String> leaveWard = null;
+        List<String> leaveDept = null;
+        if (deptConfigValue != null && !deptConfigValue.isEmpty()) {
+            leaveDept = Arrays.stream(deptConfigValue.split(",")).filter(s -> !s.trim().isEmpty()).collect(Collectors.toList());
+        }
+        if (wardConfigValue != null && !wardConfigValue.isEmpty()) {
+            leaveWard = Arrays.stream(wardConfigValue.split(",")).filter(s -> !s.trim().isEmpty()).collect(Collectors.toList());
+        }
+        log.info("绂婚櫌鐥呭尯leaveWard: {}, 绂婚櫌绉戝leaveDept: {}", leaveWard, leaveDept);
+        if (leaveWard == null && leaveDept == null) return;
+
+        //2.鑾峰彇leaveWard锛宭eaveDept涓殑servic_subtask琛ㄤ腑sendstate=5鐨勪换鍔�
+        ServiceSubtaskEntity serviceSubtaskEntity = new ServiceSubtaskEntity();
+        serviceSubtaskEntity.setSendstate(5L);
+        serviceSubtaskEntity.setLeavehospitaldistrictcodes(leaveWard);
+        serviceSubtaskEntity.setLeaveldeptcodes(leaveDept);
+        if (!Objects.isNull(leaveWard) && !Objects.isNull(leaveDept)) serviceSubtaskEntity.setDeptOrDistrict("2");
+        List<ServiceSubtask> serviceSubtasks = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskEntity);
+
+        if (CollectionUtils.isEmpty(serviceSubtasks)) return;
+
+        //3.濡傛灉鏌ュ嚭鏉ョ殑闆嗗悎涓嶄负绌猴紝鍒欒繘琛屽惊鐜�
+        for (ServiceSubtask serviceSubtask : serviceSubtasks) {
+            Integer preachformSize = 0;
+            Boolean flag = false;
+            ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform();
+            serviceSubtaskPreachform.setSubid(serviceSubtask.getId());
+            List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
+            if (CollectionUtils.isNotEmpty(serviceSubtaskPreachforms))
+                preachformSize = serviceSubtaskPreachforms.size();
+            if (serviceSubtask.getUpdateTime() != null && DateUtils.differentDaysByMillisecond(new Date(), serviceSubtask.getUpdateTime()) >= failDay) {
+                //3.1 鍒ゆ柇褰撳墠serviceSubtask鐨剈pdateTime鏄笉鏄负绌猴紝濡傛灉涓嶄负绌猴紝鍒欏垽鏂綋鍓嶆椂闂存槸涓嶆槸涓巙pdateTime宸窛澶т簬绛変簬failDay
+                flag = saveServiceSubtaskDetail(serviceSubtask);
+            } else if (serviceSubtask.getVisitTime() != null && DateUtils.differentDaysByMillisecond(new Date(), serviceSubtask.getVisitTime()) >= failDay + preachformSize) {
+                //3.2 濡傛灉褰撳墠serviceSubtask鐨剈pdateTime涓虹┖锛屾牴鎹綋鍓峴erviceSubtask鐨剆ubid鍘绘煡service_subtask_preachform寰楀埌size锛堝鏋渟ize涓虹┖锛屽垯榛樿0锛夛紝鍒欐牴鎹綋鍓嶆椂闂存槸涓嶆槸涓庡綋鍓峴erviceSubtask鐨剉isitTime宸窛澶т簬绛変簬failDay + size
+                flag = saveServiceSubtaskDetail(serviceSubtask);
+            } else {
+                //3.3 濡傛灉2.1涓�2.2閮戒负false锛屽垯continue
+                continue;
+            }
+
+            //4.濡傛灉flag涓簍rue锛屽垯鏇存柊service_subtask琛ㄤ腑鐨剆endstate涓�6锛宲reachform涓�1
+            if (flag) {
+                serviceSubtask.setSendstate(6L);
+                serviceSubtask.setPreachform("1");
+                serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
+            } else {
+                //鍒犻櫎璇柊澧瀌etail閲岀殑鏁版嵁
+                ServiceSubtaskDetail serviceSubtaskDetail = new ServiceSubtaskDetail();
+                serviceSubtaskDetail.setSubId(serviceSubtask.getId());
+                List<ServiceSubtaskDetail> serviceSubtaskDetails = serviceSubtaskDetailMapper.selectServiceSubtaskDetailList(serviceSubtaskDetail);
+                if (CollectionUtils.isNotEmpty(serviceSubtaskDetails)) {
+                    for (ServiceSubtaskDetail serviceSubtaskDetail1 : serviceSubtaskDetails) {
+                        serviceSubtaskDetail1.setDelFlag("1");
+                        serviceSubtaskDetailMapper.updateServiceSubtaskDetail(serviceSubtaskDetail1);
+                    }
+                }
+            }
+        }
+    }
+
+    private Boolean saveServiceSubtaskDetail(ServiceSubtask serviceSubtask) {
+        Boolean result = true;
+        //3.4 濡傛灉3.1鎴�3.2涓簍rue鐨勮瘽锛屾牴鎹畉ype鍒ゆ柇浠�涔堢被鍨�
+        if (serviceSubtask.getType().equals("1")) {
+            //3.3.1    濡傛灉type鏄� 1 锛屽垯鐢ㄥ綋鍓峴erviceSubtask鐨則emplateid鍘籭vr_task_temaplate_script涓幏鍙栭棶棰樺拰閫夐」锛屽皢闂鍜岄�夐」鐨勯粯璁ゅ�兼斁鍒皊ervice_detail涓�
+            IvrTaskTemplateScript ivrTaskTemplateScript = new IvrTaskTemplateScript();
+            ivrTaskTemplateScript.setTemplateID(serviceSubtask.getTemplateid());
+            List<IvrTaskTemplateScript> ivrTaskTemplateScripts = iIvrTaskTemplateScriptService.selectIvrTaskTemplateScriptList(ivrTaskTemplateScript);
+            for (IvrTaskTemplateScript its : ivrTaskTemplateScripts) {
+                IvrTaskTemplateScriptVO ivrTaskTemplateScriptVO = DtoConversionUtils.sourceToTarget(its, IvrTaskTemplateScriptVO.class);
+                IvrTaskTemplateTargetoption ivrTaskTemplateTargetoption = new IvrTaskTemplateTargetoption();
+                ivrTaskTemplateTargetoption.setScriptid(ivrTaskTemplateScriptVO.getId());
+                List<IvrTaskTemplateTargetoption> ivrTaskTemplateTargetoptions = iIvrTaskTemplateTargetoptionService.selectIvrTaskTemplateTargetoptionList(ivrTaskTemplateTargetoption);
+                ivrTaskTemplateScriptVO.setIvrTaskScriptTargetoptionList(ivrTaskTemplateTargetoptions);
+                Integer integer = setSFDetailInfo(ivrTaskTemplateScriptVO, serviceSubtask);
+                if (Objects.isNull(integer) || integer == 0) result = false;
+            }
+
+        } else if (serviceSubtask.getType().equals("2")) {
+            //3.3.2    濡傛灉type鏄� 2,鍒欑敤褰撳墠serviceSubtask鐨則emplateid鍘籹vy_task_temaplate_script涓幏鍙栭棶棰樺拰閫夐」锛屽皢闂鍜岄�夐」鐨勯粯璁ゅ�兼斁鍒皊ervice_detail涓�
+            SvyTaskTemplateScript svyTaskTemplateScript = new SvyTaskTemplateScript();
+            svyTaskTemplateScript.setTemplateID(serviceSubtask.getTemplateid());
+            List<SvyTaskTemplateScript> svyTaskTemplateScripts = svyTaskTemplateScriptService.selectSvyTaskTemplateScriptList(svyTaskTemplateScript);
+            for (SvyTaskTemplateScript taskTemplateScript : svyTaskTemplateScripts) {
+                SvyTaskTemplateScriptVO svyTaskTemplateScriptVO = DtoConversionUtils.sourceToTarget(taskTemplateScript, SvyTaskTemplateScriptVO.class);
+                SvyTaskTemplateScriptVO svyTaskTemplateScriptVO1 = svyTaskTemplateScriptService.selectInfoByCondition(svyTaskTemplateScriptVO);
+                Integer integer = setWJDetailInfo(svyTaskTemplateScriptVO1, serviceSubtask);
+                if (Objects.isNull(integer) || integer == 0) result = false;
+            }
+        }
+        return result;
+    }
+
+    private Integer setWJDetailInfo(SvyTaskTemplateScriptVO svyTaskTemplateScriptVO, ServiceSubtask serviceSubtask) {
+        log.info("-----setWJDetailInfo鐨勫叆鍙備负锛歿}", svyTaskTemplateScriptVO);
+
+        ServiceSubtaskDetailVO serviceSubtaskDetailVO = new ServiceSubtaskDetailVO();
+        if (svyTaskTemplateScriptVO.getScriptType().equals("1") || svyTaskTemplateScriptVO.getScriptType().equals("2")) {
+            //1銆�2涓哄崟閫夋垨澶氶��
+            for (SvyTaskTemplateTargetoption svyTaskTemplateTargetoption : svyTaskTemplateScriptVO.getSvyTaskTemplateTargetoptions()) {
+                //灏嗛棶棰橀�夐」璁板綍涓嬫潵
+                if (StringUtils.isEmpty(serviceSubtaskDetailVO.getTargetvalue())) {
+                    serviceSubtaskDetailVO.setTargetvalue(svyTaskTemplateTargetoption.getOptioncontent());
+                } else {
+                    serviceSubtaskDetailVO.setTargetvalue(serviceSubtaskDetailVO.getTargetvalue() + "&" + svyTaskTemplateTargetoption.getOptioncontent());
+                }
+                if (svyTaskTemplateTargetoption.getDefaultValue() != null && svyTaskTemplateTargetoption.getDefaultValue() == 2) {
+                    serviceSubtaskDetailVO.setAsrtext(StringUtils.isNotBlank(serviceSubtaskDetailVO.getAsrtext()) ? serviceSubtaskDetailVO.getAsrtext() + "&" + svyTaskTemplateTargetoption.getOptioncontent() : svyTaskTemplateTargetoption.getOptioncontent());
+                    serviceSubtaskDetailVO.setMatchedtext(StringUtils.isNotBlank(serviceSubtaskDetailVO.getMatchedtext()) ? serviceSubtaskDetailVO.getMatchedtext() + "&" + svyTaskTemplateTargetoption.getOptioncontent() : svyTaskTemplateTargetoption.getOptioncontent());
+                }
+
+            }
+            //濡傛灉asrtext鍜宮atchedtext閮戒负绌猴紝鍒欐病鏈夐粯璁ゅ�硷紝鍒欎笉杩涜澶勭悊
+            if (StringUtils.isEmpty(serviceSubtaskDetailVO.getAsrtext()) && StringUtils.isEmpty(serviceSubtaskDetailVO.getMatchedtext())) {
+                return 0;
+            }
+        }
+        ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
+        serviceSubtaskDetailVO.setQuestiontext(svyTaskTemplateScriptVO.getScriptContent());
+        serviceSubtaskDetailVO.setCategoryid(svyTaskTemplateScriptVO.getCategoryid());
+        serviceSubtaskDetailVO.setTaskid(serviceSubtask.getTaskid());
+        serviceSubtaskDetailVO.setTargetid(svyTaskTemplateScriptVO.getTargetid() != null ? svyTaskTemplateScriptVO.getTargetid().intValue() : null);
+        serviceSubtaskDetailVO.setPatid(serviceSubtask.getPatid());
+        serviceSubtaskDetailVO.setScriptid(svyTaskTemplateScriptVO.getId());
+        serviceSubtaskDetailVO.setTemplatequestionnum(StringUtils.isNotEmpty(svyTaskTemplateScriptVO.getScriptno()) ? Long.valueOf(svyTaskTemplateScriptVO.getScriptno()) : null);
+        serviceSubtaskDetailVO.setValueType(svyTaskTemplateScriptVO.getScriptType());
+        serviceSubtaskDetailVO.setComment(null);
+        serviceSubtaskDetailVO.setCreateTime(new Date());
+        serviceSubtaskDetailVO.setUpdateTime(new Date());
+        serviceSubtaskDetailVO.setTemplateType(2);
+        serviceSubtaskDetailVO.setLibTemplateid(serviceSubtask.getLibtemplateid() != null ? serviceSubtask.getLibtemplateid().intValue() : null);
+        if (ObjectUtils.isNotEmpty(serviceTask)) {
+            serviceSubtaskDetailVO.setGuid(serviceTask.getGuid());
+            serviceSubtaskDetailVO.setOrgid(serviceTask.getOrgid());
+        }
+        serviceSubtaskDetailVO.setSubId(serviceSubtask.getId());
+        serviceSubtaskDetailVO.setTemplatequestionnum(svyTaskTemplateScriptVO.getId());
+        ServiceSubtaskDetail serviceSubtaskDetail = DtoConversionUtils.sourceToTarget(serviceSubtaskDetailVO, ServiceSubtaskDetail.class);
+
+        //鍏堢敤subid鍜宻criptid鏌ヨ涓�涓嬫槸鍚﹀瓨鍦紝濡傛灉瀛樺湪鍒欐洿鏂帮紝涓嶅瓨鍦ㄥ垯鎻掑叆
+        ServiceSubtaskDetailDTO existServiceSubtaskDetail = serviceSubtaskDetailMapper.isExistServiceSubtaskDetail(serviceSubtaskDetailVO.getSubId(), serviceSubtaskDetailVO.getScriptid());
+        if (ObjectUtils.isNotEmpty(existServiceSubtaskDetail)) {
+            serviceSubtaskDetail.setId(existServiceSubtaskDetail.getId());
+            serviceSubtaskDetail.setUpdateTime(new Date());
+            return serviceSubtaskDetailMapper.updateServiceSubtaskDetail(serviceSubtaskDetail);
+        } else {
+            return serviceSubtaskDetailMapper.insertServiceSubtaskDetail(serviceSubtaskDetail);
+        }
+    }
+
+    private Integer setSFDetailInfo(IvrTaskTemplateScriptVO ivrTaskTemplateScriptVO, ServiceSubtask serviceSubtask) {
+
+        ServiceSubtaskDetailVO serviceSubtaskDetailVO = new ServiceSubtaskDetailVO();
+        if (ivrTaskTemplateScriptVO.getScriptType() != null && (ivrTaskTemplateScriptVO.getScriptType().equals("1") || ivrTaskTemplateScriptVO.getScriptType().equals("2"))) {
+            //1銆�2涓哄崟閫夋垨澶氶��
+            for (IvrTaskTemplateTargetoption ivrTaskTemplateTargetoption : ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList()) {
+                //灏嗛棶棰橀�夐」璁板綍涓嬫潵
+                if (StringUtils.isEmpty(serviceSubtaskDetailVO.getTargetvalue())) {
+                    serviceSubtaskDetailVO.setTargetvalue(ivrTaskTemplateTargetoption.getTargetvalue());
+                } else {
+                    serviceSubtaskDetailVO.setTargetvalue(serviceSubtaskDetailVO.getTargetvalue() + "&" + ivrTaskTemplateTargetoption.getTargetvalue());
+                }
+                if (ivrTaskTemplateTargetoption.getDefaultValue() != null && ivrTaskTemplateTargetoption.getDefaultValue() == 2) {
+                    //鍖荤敓鎵嬪姩濉姤鏃讹紝鍊兼槸鍦╥vrtext涓�
+                    serviceSubtaskDetailVO.setAsrtext(StringUtils.isEmpty(serviceSubtaskDetailVO.getAsrtext()) ? ivrTaskTemplateTargetoption.getTargetvalue() : serviceSubtaskDetailVO.getAsrtext() + "&" + ivrTaskTemplateTargetoption.getTargetvalue());
+                    serviceSubtaskDetailVO.setMatchedtext(StringUtils.isEmpty(serviceSubtaskDetailVO.getMatchedtext()) ? ivrTaskTemplateTargetoption.getTargetvalue() : serviceSubtaskDetailVO.getMatchedtext() + "&" + ivrTaskTemplateTargetoption.getTargetvalue());
+                }
+            }
+            //濡傛灉asrtext鍜宮atchedtext閮戒负绌猴紝鍒欐病鏈夐粯璁ゅ�硷紝涓嶈繘琛屽鐞�
+            if (StringUtils.isEmpty(serviceSubtaskDetailVO.getAsrtext()) && StringUtils.isEmpty(serviceSubtaskDetailVO.getMatchedtext())) {
+                return 0;
+            }
+        }
+
+        serviceSubtaskDetailVO.setTargetid(ivrTaskTemplateScriptVO.getTargetid() != null ? ivrTaskTemplateScriptVO.getTargetid().intValue() : null);
+        serviceSubtaskDetailVO.setQuestiontext(ivrTaskTemplateScriptVO.getScriptContent());
+        serviceSubtaskDetailVO.setTaskid(serviceSubtask.getTaskid());
+        serviceSubtaskDetailVO.setPatid(serviceSubtask.getPatid());
+        serviceSubtaskDetailVO.setScriptid(ivrTaskTemplateScriptVO.getScriptID() == null ? ivrTaskTemplateScriptVO.getId() : ivrTaskTemplateScriptVO.getScriptID());
+        serviceSubtaskDetailVO.setTemplatequestionnum(ivrTaskTemplateScriptVO.getId());
+        serviceSubtaskDetailVO.setValueType(ivrTaskTemplateScriptVO.getScriptType());
+        serviceSubtaskDetailVO.setComment(null);
+        serviceSubtaskDetailVO.setCreateTime(new Date());
+        serviceSubtaskDetailVO.setGuid(ivrTaskTemplateScriptVO.getGuid());
+        serviceSubtaskDetailVO.setOrgid(ivrTaskTemplateScriptVO.getOrgid());
+        serviceSubtaskDetailVO.setUpdateTime(new Date());
+        serviceSubtaskDetailVO.setSubId(serviceSubtask.getId());
+        serviceSubtaskDetailVO.setTemplatequestionnum(ivrTaskTemplateScriptVO.getId());
+        serviceSubtaskDetailVO.setTemplateType(1);
+        serviceSubtaskDetailVO.setTemplateid(ivrTaskTemplateScriptVO.getTemplateID() == null ? null : ivrTaskTemplateScriptVO.getTemplateID().toString());
+        serviceSubtaskDetailVO.setLibTemplateid(serviceSubtask.getLibtemplateid() != null ? serviceSubtask.getLibtemplateid().intValue() : null);
+        ServiceSubtaskDetail serviceSubtaskDetail = DtoConversionUtils.sourceToTarget(serviceSubtaskDetailVO, ServiceSubtaskDetail.class);
+        //鍏堢敤subid鍜宻criptid鏌ヨ涓�涓嬫槸鍚﹀瓨鍦紝濡傛灉瀛樺湪鍒欐洿鏂帮紝涓嶅瓨鍦ㄥ垯鎻掑叆
+        ServiceSubtaskDetailDTO existServiceSubtaskDetail = serviceSubtaskDetailMapper.isExistServiceSubtaskDetail(serviceSubtaskDetailVO.getSubId(), serviceSubtaskDetailVO.getScriptid());
+        if (ObjectUtils.isNotEmpty(existServiceSubtaskDetail)) {
+            serviceSubtaskDetail.setId(existServiceSubtaskDetail.getId());
+            serviceSubtaskDetail.setUpdateTime(new Date());
+            return serviceSubtaskDetailMapper.updateServiceSubtaskDetail(serviceSubtaskDetail);
+        } else {
+            return serviceSubtaskDetailMapper.insertServiceSubtaskDetail(serviceSubtaskDetail);
+        }
+    }
+
 }
diff --git a/smartor/src/main/resources/mapper/smartor/IvrLibaScriptTargetoptionMapper.xml b/smartor/src/main/resources/mapper/smartor/IvrLibaScriptTargetoptionMapper.xml
index 20de24c..462d545 100644
--- a/smartor/src/main/resources/mapper/smartor/IvrLibaScriptTargetoptionMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/IvrLibaScriptTargetoptionMapper.xml
@@ -38,11 +38,13 @@
         <result property="picturePath" column="picture_path"/>
         <result property="isEnd" column="is_end"/>
         <result property="isException" column="is_exception"/>
+        <result property="defaultValue" column="default_value"/>
     </resultMap>
 
     <sql id="selectIvrLibaScriptTargetoptionVo">
         select id,
                targetid,
+               default_value,
                is_end,
                is_exception,
                picture_path,
@@ -65,36 +67,37 @@
             resultMap="IvrLibaScriptTargetoptionResult">
         <include refid="selectIvrLibaScriptTargetoptionVo"/>
         where 1=1
-            and del_flag = 0
-            <if test="targetid != null  and targetid != ''">and targetid = #{targetid}</if>
-            <if test="targetname != null  and targetname != ''">and targetname = #{targetname}</if>
-            <if test="scriptid != null ">and scriptid = #{scriptid}</if>
-            <if test="targettype != null  and targettype != ''">and targettype = #{targettype}</if>
-            <if test="categoryName != null  and categoryName != ''">and categoryName like concat('%', #{categoryName},
-                '%')
-            </if>
-            <if test="targetvalue != null  and targetvalue != ''">and targetvalue = #{targetvalue}</if>
-            <if test="targetregex != null  and targetregex != ''">and targetregex = #{targetregex}</if>
-            <if test="targetregex2 != null  and targetregex2 != ''">and targetregex2 = #{targetregex2}</if>
-            <if test="optiondesc != null  and optiondesc != ''">and optiondesc = #{optiondesc}</if>
-            <if test="language != null  and language != ''">and language = #{language}</if>
-            <if test="version != null ">and version = #{version}</if>
-            <if test="isEnd != null ">and is_end = #{isEnd}</if>
-            <if test="groupid != null  and groupid != ''">and groupid = #{groupid}</if>
-            <if test="isabnormal != null ">and isabnormal = #{isabnormal}</if>
-            <if test="warnup != null ">and warnup = #{warnup}</if>
-            <if test="warndown != null ">and warndown = #{warndown}</if>
-            <if test="isupload != null ">and isupload = #{isupload}</if>
-            <if test="uploadTime != null ">and upload_time = #{uploadTime}</if>
-            <if test="orgid != null  and orgid != ''">and orgid = #{orgid}</if>
-            <if test="pid != null ">and pid = #{pid}</if>
-            <if test="guid != null  and guid != ''">and guid = #{guid}</if>
-            <if test="nodynamiccruxsJson != null ">and nodynamiccruxs = #{nodynamiccruxsJson}</if>
-            <if test="dynamiccruxsJson != null ">and dynamiccruxs = #{dynamiccruxsJson}</if>
-            <if test="appendflag != null">and appendflag = #{appendflag}</if>
-            <if test="appenddesc != null">and appenddesc = #{appenddesc}</if>
-            <if test="picturePath != null">and picture_path = #{picturePath}</if>
-            <if test="isException != null">and is_exception = #{isException}</if>
+        and del_flag = 0
+        <if test="targetid != null  and targetid != ''">and targetid = #{targetid}</if>
+        <if test="defaultValue != null">and default_value = #{defaultValue}</if>
+        <if test="targetname != null  and targetname != ''">and targetname = #{targetname}</if>
+        <if test="scriptid != null ">and scriptid = #{scriptid}</if>
+        <if test="targettype != null  and targettype != ''">and targettype = #{targettype}</if>
+        <if test="categoryName != null  and categoryName != ''">and categoryName like concat('%', #{categoryName},
+            '%')
+        </if>
+        <if test="targetvalue != null  and targetvalue != ''">and targetvalue = #{targetvalue}</if>
+        <if test="targetregex != null  and targetregex != ''">and targetregex = #{targetregex}</if>
+        <if test="targetregex2 != null  and targetregex2 != ''">and targetregex2 = #{targetregex2}</if>
+        <if test="optiondesc != null  and optiondesc != ''">and optiondesc = #{optiondesc}</if>
+        <if test="language != null  and language != ''">and language = #{language}</if>
+        <if test="version != null ">and version = #{version}</if>
+        <if test="isEnd != null ">and is_end = #{isEnd}</if>
+        <if test="groupid != null  and groupid != ''">and groupid = #{groupid}</if>
+        <if test="isabnormal != null ">and isabnormal = #{isabnormal}</if>
+        <if test="warnup != null ">and warnup = #{warnup}</if>
+        <if test="warndown != null ">and warndown = #{warndown}</if>
+        <if test="isupload != null ">and isupload = #{isupload}</if>
+        <if test="uploadTime != null ">and upload_time = #{uploadTime}</if>
+        <if test="orgid != null  and orgid != ''">and orgid = #{orgid}</if>
+        <if test="pid != null ">and pid = #{pid}</if>
+        <if test="guid != null  and guid != ''">and guid = #{guid}</if>
+        <if test="nodynamiccruxsJson != null ">and nodynamiccruxs = #{nodynamiccruxsJson}</if>
+        <if test="dynamiccruxsJson != null ">and dynamiccruxs = #{dynamiccruxsJson}</if>
+        <if test="appendflag != null">and appendflag = #{appendflag}</if>
+        <if test="appenddesc != null">and appenddesc = #{appenddesc}</if>
+        <if test="picturePath != null">and picture_path = #{picturePath}</if>
+        <if test="isException != null">and is_exception = #{isException}</if>
     </select>
 
     <select id="selectIvrLibaScriptTargetoptionByTargetoptionid" parameterType="String"
@@ -139,6 +142,7 @@
             <if test="picturePath != null">picture_path,</if>
             <if test="isEnd != null ">is_end,</if>
             <if test="isException != null ">is_exception,</if>
+            <if test="defaultValue != null ">default_value,</if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="id != null">#{id},</if>
@@ -174,6 +178,7 @@
             <if test="picturePath != null">#{picturePath},</if>
             <if test="isEnd != null ">#{isEnd},</if>
             <if test="isException != null ">#{isException},</if>
+            <if test="defaultValue != null ">#{defaultValue},</if>
         </trim>
     </insert>
 
@@ -212,6 +217,7 @@
             <if test="picturePath != null">picture_path = #{picturePath},</if>
             <if test="isEnd != null ">is_end = #{isEnd},</if>
             <if test="isException != null ">is_exception = #{isException},</if>
+            <if test="defaultValue != null ">default_value = #{defaultValue},</if>
         </trim>
         where id = #{id}
     </update>
diff --git a/smartor/src/main/resources/mapper/smartor/IvrLibaTemplateTargetoptionMapper.xml b/smartor/src/main/resources/mapper/smartor/IvrLibaTemplateTargetoptionMapper.xml
index caef2dd..3de0c7c 100644
--- a/smartor/src/main/resources/mapper/smartor/IvrLibaTemplateTargetoptionMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/IvrLibaTemplateTargetoptionMapper.xml
@@ -42,12 +42,13 @@
         <result property="sendTaskid" column="send_taskid"/>
         <result property="sendTaskname" column="send_taskname"/>
         <result property="isException" column="is_exception"/>
+        <result property="defaultValue" column="default_value"/>
     </resultMap>
 
     <sql id="selectIvrLibaTemplateTargetoptionVo">
         select id,
                targetid,
-               is_exception,
+               default_value,
                send_taskid,
                send_taskname,
                is_end,
@@ -77,7 +78,7 @@
         where 1=1
             and del_flag = 0
             <if test="targetid != null ">and targetid = #{targetid}</if>
-            <if test="isException != null ">and is_exception = #{isException}</if>
+            <if test="defaultValue != null ">and default_value = #{defaultValue}</if>
             <if test="isEnd != null ">and is_end = #{isEnd}</if>
             <if test="score != null ">and score = #{score}</if>
             <if test="targetname != null ">and targetname = #{targetname}</if>
@@ -154,6 +155,7 @@
             <if test="sendTaskid != null">send_taskid,</if>
             <if test="sendTaskname != null">send_taskname,</if>
             <if test="isException != null">is_exception,</if>
+            <if test="defaultValue != null">default_value,</if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="targetid != null">#{targetid},</if>
@@ -191,6 +193,7 @@
             <if test="sendTaskid != null">#{sendTaskid},</if>
             <if test="sendTaskname != null">#{sendTaskname},</if>
             <if test="isException != null">#{isException},</if>
+            <if test="defaultValue != null">#{defaultValue},</if>
         </trim>
     </insert>
 
@@ -232,6 +235,7 @@
             <if test="sendTaskid != null">send_taskid= #{sendTaskid},</if>
             <if test="sendTaskname != null">send_taskname = #{sendTaskname},</if>
             <if test="isException != null">is_exception = #{isException},</if>
+            <if test="defaultValue != null">default_value = #{defaultValue},</if>
         </trim>
         where id = #{id}
     </update>
@@ -242,6 +246,7 @@
 
             <if test="nodynamiccruxsJson == null ">nodynamiccruxs = #{nodynamiccruxsJson},</if>
             <if test="dynamiccruxsJson == null ">dynamiccruxs = #{dynamiccruxsJson},</if>
+            <if test="defaultValue == null ">default_value = #{defaultValue},</if>
 
         </trim>
         where id = #{id}
diff --git a/smartor/src/main/resources/mapper/smartor/IvrTaskTemplateTargetoptionMapper.xml b/smartor/src/main/resources/mapper/smartor/IvrTaskTemplateTargetoptionMapper.xml
index e486e3e..64ce2ee 100644
--- a/smartor/src/main/resources/mapper/smartor/IvrTaskTemplateTargetoptionMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/IvrTaskTemplateTargetoptionMapper.xml
@@ -45,6 +45,7 @@
         <result property="sendTaskid" column="send_taskid"/>
         <result property="sendTaskname" column="send_taskname"/>
         <result property="isException" column="is_exception"/>
+        <result property="defaultValue" column="default_value"/>
     </resultMap>
 
     <sql id="selectIvrTaskTemplateTargetoptionVo">
@@ -66,6 +67,7 @@
                targetvalue,
                targetregex2,
                targetregex,
+               default_value,
                optiondesc, language, version, groupid, isabnormal, warnup, warndown, del_flag, update_by, update_time, create_by, create_time, isupload, upload_time, orgid, pid, guid, scriptid, nodynamiccruxs, dynamiccruxs, next_question
         from ivr_task_template_targetoption
     </sql>
@@ -111,6 +113,7 @@
             <if test="score != null ">and score = #{score}</if>
             <if test="sendTaskid != null">and send_taskid= #{sendTaskid}</if>
             <if test="sendTaskname != null">and send_taskname = #{sendTaskname}</if>
+            <if test="defaultValue != null">and default_value = #{defaultValue}</if>
     </select>
 
     <select id="selectIvrTaskTemplateTargetoptionById" parameterType="Long"
@@ -161,6 +164,7 @@
             <if test="sendTaskid != null">send_taskid,</if>
             <if test="sendTaskname != null">send_taskname,</if>
             <if test="isException != null ">is_exception,</if>
+            <if test="defaultValue != null">default_value,</if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="taskid != null">#{taskid},</if>
@@ -201,6 +205,7 @@
             <if test="sendTaskid != null">#{sendTaskid},</if>
             <if test="sendTaskname != null">#{sendTaskname},</if>
             <if test="isException != null ">#{isException},</if>
+            <if test="defaultValue != null">#{defaultValue},</if>
         </trim>
     </insert>
 
@@ -245,6 +250,7 @@
             <if test="sendTaskid != null">send_taskid= #{sendTaskid},</if>
             <if test="sendTaskname != null">send_taskname = #{sendTaskname},</if>
             <if test="isException != null ">is_exception = #{isException},</if>
+            <if test="defaultValue != null">default_value = #{defaultValue},</if>
         </trim>
         where id = #{id}
     </update>
diff --git a/smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml b/smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml
index 24f8484..405bc68 100644
--- a/smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml
@@ -280,11 +280,26 @@
                 #{leavehospitaldistrictcode}
             </foreach>
         </if>
+
+        <if test="hospitaldistrictcodeList != null and hospitaldistrictcodeList.size()>0">
+            AND b.hospitaldistrictcode IN
+            <foreach collection="hospitaldistrictcodeList" item="hospitaldistrictcode" open="(" separator=","
+                     close=")">
+                #{hospitaldistrictcode}
+            </foreach>
+        </if>
         <if test="leaveldeptcodes != null and leaveldeptcodes.size()>0">
             AND b.leaveldeptcode IN
             <foreach collection="leaveldeptcodes" item="leaveldeptcode" open="(" separator=","
                      close=")">
                 #{leaveldeptcode}
+            </foreach>
+        </if>
+        <if test="deptcodeList != null and deptcodeList.size()>0">
+            AND b.deptcode IN
+            <foreach collection="deptcodeList" item="deptcode" open="(" separator=","
+                     close=")">
+                #{deptcode}
             </foreach>
         </if>
         GROUP BY
@@ -855,73 +870,73 @@
     <select id="selectPatMedInhospCount" parameterType="com.smartor.domain.PatMedReq"
             resultType="com.smartor.domain.PatMedRes">
         SELECT SUM(rc) AS rc,
-               SUM(rs) AS rs,
-               SUM(scsf) AS scsf,
-               SUM(zcsf) AS zcsf,
-               SUM(zbsf) AS zbsf
+        SUM(rs) AS rs,
+        SUM(scsf) AS scsf,
+        SUM(zcsf) AS zcsf,
+        SUM(zbsf) AS zbsf
         FROM (
-            <!-- 鍑洪櫌浜烘锛氬幓鎺� date_format 鍖呰锛屼娇鏃ユ湡瀛楁绱㈠紩鐢熸晥 -->
-            SELECT
-                COUNT(1) AS rc,
-                0 AS rs,
-                0 AS scsf,
-                0 AS zcsf,
-                0 AS zbsf
-            FROM pat_med_inhosp
-            JOIN pat_archive ON pat_archive.id = pat_med_inhosp.patid
-            WHERE pat_med_inhosp.del_flag = 0
-            <if test="orgid != null and orgid != ''">
-                AND pat_med_inhosp.orgid = #{orgid}
-            </if>
-            AND pat_archive.idcardno IS NOT NULL
-            <if test="zy != null">
-                AND pat_med_inhosp.inhospstate = 0
-                AND pat_med_inhosp.starttime &gt;= #{startDate}
-                AND pat_med_inhosp.starttime &lt; DATE_ADD(#{endDate}, INTERVAL 1 DAY)
-                <if test="deptcodeList != null and deptcodeList.size() > 0">
-                    AND pat_med_inhosp.deptcode IN
-                    <foreach collection="deptcodeList" item="deptcode" open="(" separator="," close=")">
-                        #{deptcode}
-                    </foreach>
-                </if>
-            </if>
-            <if test="cy != null">
-                AND pat_med_inhosp.inhospstate = 1
-                AND pat_med_inhosp.endtime &gt;= #{startDate}
-                AND pat_med_inhosp.endtime &lt; DATE_ADD(#{endDate}, INTERVAL 1 DAY)
-                <if test="deptcodeList != null and deptcodeList.size() > 0">
-                    AND pat_med_inhosp.leaveldeptcode IN
-                    <foreach collection="deptcodeList" item="deptcode" open="(" separator="," close=")">
-                        #{deptcode}
-                    </foreach>
-                </if>
-            </if>
-            UNION ALL
-            <!-- 闅忚鏈嶅姟/棣栨/鍐嶆/涓撶梾闅忚锛氬悎骞朵负鍗曟鎵弿锛岀敤鏉′欢鑱氬悎浠f浛4涓� UNION ALL -->
-            SELECT
-                0 AS rc,
-                COUNT(1) AS rs,
-                SUM(CASE WHEN service_type = 2 AND visit_count = 1 THEN 1 ELSE 0 END) AS scsf,
-                SUM(CASE WHEN service_type = 2 AND visit_count > 1  THEN 1 ELSE 0 END) AS zcsf,
-                SUM(CASE WHEN service_type = 13                      THEN 1 ELSE 0 END) AS zbsf
-            FROM service_subtask
-            WHERE del_flag = 0
-            AND service_type IN (2, 13)
-            <if test="orgid != null and orgid != ''">
-                AND orgid = #{orgid}
-            </if>
-            <if test="startDate != null">
-                AND visit_time &gt;= #{startDate}
-            </if>
-            <if test="endDate != null">
-                AND visit_time &lt; DATE_ADD(#{endDate}, INTERVAL 1 DAY)
-            </if>
+        <!-- 鍑洪櫌浜烘锛氬幓鎺� date_format 鍖呰锛屼娇鏃ユ湡瀛楁绱㈠紩鐢熸晥 -->
+        SELECT
+        COUNT(1) AS rc,
+        0 AS rs,
+        0 AS scsf,
+        0 AS zcsf,
+        0 AS zbsf
+        FROM pat_med_inhosp
+        JOIN pat_archive ON pat_archive.id = pat_med_inhosp.patid
+        WHERE pat_med_inhosp.del_flag = 0
+        <if test="orgid != null and orgid != ''">
+            AND pat_med_inhosp.orgid = #{orgid}
+        </if>
+        AND pat_archive.idcardno IS NOT NULL
+        <if test="zy != null">
+            AND pat_med_inhosp.inhospstate = 0
+            AND pat_med_inhosp.starttime &gt;= #{startDate}
+            AND pat_med_inhosp.starttime &lt; DATE_ADD(#{endDate}, INTERVAL 1 DAY)
             <if test="deptcodeList != null and deptcodeList.size() > 0">
-                AND deptcode IN
+                AND pat_med_inhosp.deptcode IN
                 <foreach collection="deptcodeList" item="deptcode" open="(" separator="," close=")">
                     #{deptcode}
                 </foreach>
             </if>
+        </if>
+        <if test="cy != null">
+            AND pat_med_inhosp.inhospstate = 1
+            AND pat_med_inhosp.endtime &gt;= #{startDate}
+            AND pat_med_inhosp.endtime &lt; DATE_ADD(#{endDate}, INTERVAL 1 DAY)
+            <if test="deptcodeList != null and deptcodeList.size() > 0">
+                AND pat_med_inhosp.leaveldeptcode IN
+                <foreach collection="deptcodeList" item="deptcode" open="(" separator="," close=")">
+                    #{deptcode}
+                </foreach>
+            </if>
+        </if>
+        UNION ALL
+        <!-- 闅忚鏈嶅姟/棣栨/鍐嶆/涓撶梾闅忚锛氬悎骞朵负鍗曟鎵弿锛岀敤鏉′欢鑱氬悎浠f浛4涓� UNION ALL -->
+        SELECT
+        0 AS rc,
+        COUNT(1) AS rs,
+        SUM(CASE WHEN service_type = 2 AND visit_count = 1 THEN 1 ELSE 0 END) AS scsf,
+        SUM(CASE WHEN service_type = 2 AND visit_count > 1 THEN 1 ELSE 0 END) AS zcsf,
+        SUM(CASE WHEN service_type = 13 THEN 1 ELSE 0 END) AS zbsf
+        FROM service_subtask
+        WHERE del_flag = 0
+        AND service_type IN (2, 13)
+        <if test="orgid != null and orgid != ''">
+            AND orgid = #{orgid}
+        </if>
+        <if test="startDate != null">
+            AND visit_time &gt;= #{startDate}
+        </if>
+        <if test="endDate != null">
+            AND visit_time &lt; DATE_ADD(#{endDate}, INTERVAL 1 DAY)
+        </if>
+        <if test="deptcodeList != null and deptcodeList.size() > 0">
+            AND deptcode IN
+            <foreach collection="deptcodeList" item="deptcode" open="(" separator="," close=")">
+                #{deptcode}
+            </foreach>
+        </if>
         ) AS combined_data
     </select>
 
diff --git a/smartor/src/main/resources/mapper/smartor/SvyLibScriptOptionMapper.xml b/smartor/src/main/resources/mapper/smartor/SvyLibScriptOptionMapper.xml
index 70fd431..f538797 100644
--- a/smartor/src/main/resources/mapper/smartor/SvyLibScriptOptionMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/SvyLibScriptOptionMapper.xml
@@ -41,12 +41,14 @@
         <result property="appendflag" column="appendflag"/>
         <result property="appenddesc" column="appenddesc"/>
         <result property="guid" column="guid"/>
+        <result property="defaultValue" column="default_value"/>
     </resultMap>
 
     <sql id="selectSvyLibScriptOptionVo">
         select id,
                topicid,
                svyid,
+               default_value,
                guid,
                picture_path,
                appendflag,
@@ -117,6 +119,7 @@
             <if test="appenddesc != null">and appenddesc = #{appenddesc}</if>
             <if test="picturePath != null">and picture_path = #{picturePath}</if>
             <if test="isException != null">and is_exception = #{isException}</if>
+            <if test="defaultValue != null">and default_value = #{defaultValue}</if>
     </select>
 
     <select id="selectSvyLibScriptOptionByOptionid" parameterType="Long" resultMap="SvyLibScriptOptionResult">
@@ -163,6 +166,7 @@
             <if test="picturePath != null">picture_path,</if>
             <if test="guid != null">guid,</if>
             <if test="isException != null">is_exception,</if>
+            <if test="defaultValue != null">default_value,</if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="topicid != null">#{topicid},</if>
@@ -200,6 +204,7 @@
             <if test="picturePath != null">#{picturePath},</if>
             <if test="guid != null">#{guid},</if>
             <if test="isException != null">#{isException},</if>
+            <if test="defaultValue != null">#{defaultValue},</if>
         </trim>
     </insert>
 
@@ -240,6 +245,7 @@
             <if test="appenddesc != null">appenddesc = #{appenddesc},</if>
             <if test="picturePath != null">picture_path = #{picturePath},</if>
             <if test="isException != null">is_exception = #{isException},</if>
+            <if test="defaultValue != null">default_value = #{defaultValue},</if>
         </trim>
         where id = #{id}
     </update>
diff --git a/smartor/src/main/resources/mapper/smartor/SvyLibTemplateTargetoptionMapper.xml b/smartor/src/main/resources/mapper/smartor/SvyLibTemplateTargetoptionMapper.xml
index 6ded1c2..8de34f9 100644
--- a/smartor/src/main/resources/mapper/smartor/SvyLibTemplateTargetoptionMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/SvyLibTemplateTargetoptionMapper.xml
@@ -43,6 +43,7 @@
         <result property="prompt" column="prompt"/>
         <result property="sendTaskid" column="send_taskid"/>
         <result property="sendTaskname" column="send_taskname"/>
+        <result property="defaultValue" column="default_value"/>
     </resultMap>
 
     <sql id="selectSvyLibTemplateTargetoptionVo">
@@ -54,6 +55,7 @@
                score,
                prompt,
                option_no,
+               default_value,
                appendflag,
                appenddesc,
                categoryName,
@@ -104,6 +106,7 @@
             <if test="nextQuestion != null ">and next_question = #{nextQuestion}</if>
             <if test="language != null  and language != ''">and language = #{language}</if>
             <if test="version != null  and version != ''">and version = #{version}</if>
+            <if test="defaultValue != null">and default_value = #{defaultValue}</if>
             <if test="isupload != null ">and isupload = #{isupload}</if>
             <if test="uploadTime != null ">and upload_time = #{uploadTime}</if>
             <if test="orgid != null  and orgid != ''">and orgid = #{orgid}</if>
@@ -164,6 +167,7 @@
             <if test="prompt != null">prompt,</if>
             <if test="sendTaskid != null">send_taskid,</if>
             <if test="sendTaskname != null">send_taskname,</if>
+            <if test="defaultValue != null">default_value,</if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="groupid != null">#{groupid},</if>
@@ -203,6 +207,7 @@
             <if test="prompt != null">#{prompt},</if>
             <if test="sendTaskid != null">#{sendTaskid},</if>
             <if test="sendTaskname != null">#{sendTaskname},</if>
+            <if test="defaultValue != null">#{defaultValue},</if>
         </trim>
     </insert>
 
@@ -246,6 +251,7 @@
             <if test="prompt != null">prompt = #{prompt},</if>
             <if test="sendTaskid != null">send_taskid= #{sendTaskid},</if>
             <if test="sendTaskname != null">send_taskname = #{sendTaskname},</if>
+            <if test="defaultValue != null">default_value = #{defaultValue},</if>
         </trim>
         where id = #{id}
     </update>
diff --git a/smartor/src/main/resources/mapper/smartor/SvyTaskTemplateTargetoptionMapper.xml b/smartor/src/main/resources/mapper/smartor/SvyTaskTemplateTargetoptionMapper.xml
index 695fdcc..66359ab 100644
--- a/smartor/src/main/resources/mapper/smartor/SvyTaskTemplateTargetoptionMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/SvyTaskTemplateTargetoptionMapper.xml
@@ -45,6 +45,7 @@
         <result property="prompt" column="prompt"/>
         <result property="sendTaskid" column="send_taskid"/>
         <result property="sendTaskname" column="send_taskname"/>
+        <result property="defaultValue" column="default_value"/>
     </resultMap>
 
     <sql id="selectSvyTaskTemplateTargetoptionVo">
@@ -64,6 +65,7 @@
                categoryName,
                targetvalue,
                targetregex2,
+               default_value,
                targetregex,
                optioncontent, language, version, groupid, isabnormal, warnup, warndown, del_flag, update_by, update_time, create_by, create_time, isupload, upload_time, orgid, pid, guid, scriptid, nodynamiccruxs, dynamiccruxs, next_question, picture_path
         from svy_task_template_targetoption
@@ -73,42 +75,43 @@
             resultMap="SvyTaskTemplateTargetoptionResult">
         <include refid="selectSvyTaskTemplateTargetoptionVo"/>
         where 1=1
-            and del_flag = 0
-            <if test="taskid != null ">and taskid = #{taskid}</if>
-            <if test="score != null ">and score = #{score}</if>
-            <if test="prompt != null ">and prompt = #{prompt}</if>
-            <if test="templateID != null ">and templateID = #{templateID}</if>
-            <if test="targetid != null ">and targetid = #{targetid}</if>
-            <if test="targetname != null  and targetname != ''">and targetname like concat('%', #{targetname}, '%')</if>
-            <if test="targettype != null  and targettype != ''">and targettype = #{targettype}</if>
-            <if test="categoryName != null  and categoryName != ''">and categoryName like concat('%', #{categoryName},
-                '%')
-            </if>
-            <if test="targetvalue != null  and targetvalue != ''">and targetvalue = #{targetvalue}</if>
-            <if test="targetregex2 != null  and targetregex2 != ''">and targetregex2 = #{targetregex2}</if>
-            <if test="targetregex != null  and targetregex != ''">and targetregex = #{targetregex}</if>
-            <if test="optioncontent != null  and optioncontent != ''">and optioncontent = #{optioncontent}</if>
-            <if test="language != null  and language != ''">and language = #{language}</if>
-            <if test="version != null  and version != ''">and version = #{version}</if>
-            <if test="groupid != null  and groupid != ''">and groupid = #{groupid}</if>
-            <if test="isabnormal != null ">and isabnormal = #{isabnormal}</if>
-            <if test="warnup != null ">and warnup = #{warnup}</if>
-            <if test="warndown != null ">and warndown = #{warndown}</if>
-            <if test="isupload != null ">and isupload = #{isupload}</if>
-            <if test="uploadTime != null ">and upload_time = #{uploadTime}</if>
-            <if test="orgid != null  and orgid != ''">and orgid = #{orgid}</if>
-            <if test="pid != null ">and pid = #{pid}</if>
-            <if test="guid != null  and guid != ''">and guid = #{guid}</if>
-            <if test="scriptid != null ">and scriptid = #{scriptid}</if>
-<!--            <if test="nodynamiccruxs != null ">and nodynamiccruxs = #{nodynamiccruxsJson}</if>-->
-<!--            <if test="dynamiccruxs != null ">and dynamiccruxs = #{dynamiccruxsJson}</if>-->
-            <if test="nextQuestion != null ">and next_question = #{nextQuestion}</if>
-            <if test="picturePath != null  and picturePath != ''">and picture_path = #{picturePath}</if>
-            <if test="optionCode != null">and option_code = #{optionCode}</if>
-            <if test="appendflag != null">and appendflag = #{appendflag}</if>
-            <if test="appenddesc != null">and appenddesc = #{appenddesc}</if>
-            <if test="sendTaskid != null">and send_taskid= #{sendTaskid}</if>
-            <if test="sendTaskname != null">and send_taskname = #{sendTaskname}</if>
+        and del_flag = 0
+        <if test="taskid != null ">and taskid = #{taskid}</if>
+        <if test="score != null ">and score = #{score}</if>
+        <if test="prompt != null ">and prompt = #{prompt}</if>
+        <if test="templateID != null ">and templateID = #{templateID}</if>
+        <if test="targetid != null ">and targetid = #{targetid}</if>
+        <if test="targetname != null  and targetname != ''">and targetname like concat('%', #{targetname}, '%')</if>
+        <if test="targettype != null  and targettype != ''">and targettype = #{targettype}</if>
+        <if test="categoryName != null  and categoryName != ''">and categoryName like concat('%', #{categoryName},
+            '%')
+        </if>
+        <if test="targetvalue != null  and targetvalue != ''">and targetvalue = #{targetvalue}</if>
+        <if test="defaultValue != null">and default_value = #{defaultValue}</if>
+        <if test="targetregex2 != null  and targetregex2 != ''">and targetregex2 = #{targetregex2}</if>
+        <if test="targetregex != null  and targetregex != ''">and targetregex = #{targetregex}</if>
+        <if test="optioncontent != null  and optioncontent != ''">and optioncontent = #{optioncontent}</if>
+        <if test="language != null  and language != ''">and language = #{language}</if>
+        <if test="version != null  and version != ''">and version = #{version}</if>
+        <if test="groupid != null  and groupid != ''">and groupid = #{groupid}</if>
+        <if test="isabnormal != null ">and isabnormal = #{isabnormal}</if>
+        <if test="warnup != null ">and warnup = #{warnup}</if>
+        <if test="warndown != null ">and warndown = #{warndown}</if>
+        <if test="isupload != null ">and isupload = #{isupload}</if>
+        <if test="uploadTime != null ">and upload_time = #{uploadTime}</if>
+        <if test="orgid != null  and orgid != ''">and orgid = #{orgid}</if>
+        <if test="pid != null ">and pid = #{pid}</if>
+        <if test="guid != null  and guid != ''">and guid = #{guid}</if>
+        <if test="scriptid != null ">and scriptid = #{scriptid}</if>
+        <!--            <if test="nodynamiccruxs != null ">and nodynamiccruxs = #{nodynamiccruxsJson}</if>-->
+        <!--            <if test="dynamiccruxs != null ">and dynamiccruxs = #{dynamiccruxsJson}</if>-->
+        <if test="nextQuestion != null ">and next_question = #{nextQuestion}</if>
+        <if test="picturePath != null  and picturePath != ''">and picture_path = #{picturePath}</if>
+        <if test="optionCode != null">and option_code = #{optionCode}</if>
+        <if test="appendflag != null">and appendflag = #{appendflag}</if>
+        <if test="appenddesc != null">and appenddesc = #{appenddesc}</if>
+        <if test="sendTaskid != null">and send_taskid= #{sendTaskid}</if>
+        <if test="sendTaskname != null">and send_taskname = #{sendTaskname}</if>
     </select>
 
     <select id="selectSvyTaskTemplateTargetoptionById" parameterType="Long"
@@ -159,6 +162,7 @@
             <if test="prompt != null">prompt,</if>
             <if test="sendTaskid != null">send_taskid,</if>
             <if test="sendTaskname != null">send_taskname,</if>
+            <if test="defaultValue != null">default_value,</if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="taskid != null">#{taskid},</if>
@@ -199,6 +203,7 @@
             <if test="prompt != null">#{prompt},</if>
             <if test="sendTaskid != null">#{sendTaskid},</if>
             <if test="sendTaskname != null">#{sendTaskname}</if>
+            <if test="defaultValue != null">#{defaultValue}</if>
         </trim>
     </insert>
 
@@ -243,6 +248,7 @@
             <if test="prompt != null">score = #{prompt},</if>
             <if test="sendTaskid != null">send_taskid= #{sendTaskid},</if>
             <if test="sendTaskname != null">send_taskname = #{sendTaskname},</if>
+            <if test="defaultValue != null">default_value = #{defaultValue},</if>
         </trim>
         where id = #{id}
     </update>

--
Gitblit v1.9.3