From 55f5271f893a25a7be671b24938e49976936a67b Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期一, 29 九月 2025 18:30:00 +0800
Subject: [PATCH] 新增Orgid

---
 smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java            |  319 +++
 ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISServiceImpl.java                   |   96 
 smartor/src/main/java/com/smartor/domain/SvyTaskAnswer.java                                           |    6 
 .idea/encodings.xml                                                                                   |   30 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskAnswerController.java        |   31 
 smartor/src/main/java/com/smartor/domain/ServiceTaskVO.java                                           |   19 
 ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java                                |   13 
 ruoyi-common/src/main/java/com/ruoyi/common/utils/HttpUtil.java                                       |   14 
 smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml                                      |    9 
 ruoyi-quartz/pom.xml                                                                                  |    8 
 smartor/src/main/java/com/smartor/domain/ServiceSLTDInhospReqVO.java                                  |    2 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java                     |   70 
 smartor/src/main/java/com/smartor/service/impl/ServiceTaskServiceImpl.java                            |  158 +
 smartor/src/main/resources/mapper/smartor/ServiceSubtaskDetailMapper.xml                              |    4 
 ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml                                       |  288 +-
 smartor/src/main/java/com/smartor/service/IServiceSubtaskAnswerService.java                           |    2 
 smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java                   |  254 ++
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java                    |   51 
 smartor/src/main/java/com/smartor/mapper/ServiceSubtaskPreachformMapper.java                          |   73 
 smartor/src/main/resources/mapper/smartor/SysDeptMapper.xml                                           |   37 
 .idea/jarRepositories.xml                                                                             |    6 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SmsRecordsServiceImpl.java                   |    1 
 smartor/src/main/java/com/smartor/domain/ServiceSubtaskPreachform.java                                |   89 +
 smartor/src/main/resources/mapper/smartor/PatMedOuthospMapper.xml                                     |    9 
 smartor/src/main/java/com/smartor/common/LSHospTokenUtil.java                                         |   15 
 smartor/src/main/java/com/smartor/domain/ServiceTaskScriptQues.java                                   |   23 
 ruoyi-admin/src/main/resources/application.yml                                                        |    6 
 smartor/src/main/java/com/smartor/domain/IvrTaskTemplateScriptVO.java                                 |    6 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/SmsController.java                          |   20 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/BaseDictOperationController.java           |    5 
 smartor/src/main/java/com/smartor/domain/PatMedOuthosp.java                                           |    9 
 smartor/src/main/java/com/smartor/mapper/SysDept2Mapper.java                                          |    2 
 smartor/src/main/java/com/smartor/domain/ServiceTask.java                                             |    8 
 smartor/src/main/resources/mapper/smartor/PatArchiveMapper.xml                                        |   28 
 smartor/src/main/java/com/smartor/service/impl/SvyTaskSingleServiceImpl.java                          |    3 
 ruoyi-admin/src/main/java/com/ruoyi/web/component/RedisMqReceiver.java                                | 1004 ++++++-----
 smartor/src/main/java/com/smartor/domain/ServiceSubTaskMYDAnswerReq.java                              |   30 
 ruoyi-admin/src/main/java/com/ruoyi/web/test/MQTest.java                                              |    2 
 ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java                          |    3 
 ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml                                     |    3 
 smartor/src/main/java/com/smartor/domain/PatArchiveReq.java                                           |    2 
 smartor/src/main/java/com/smartor/domain/ServiceSubtask.java                                          |   15 
 smartor/src/main/resources/mapper/smartor/HNGatherPatArchiveMapper.xml                                |    2 
 ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml                                       |    8 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java                       |   35 
 ruoyi-admin/src/main/resources/application-sltd.yml                                                   |    5 
 smartor/src/main/java/com/smartor/service/impl/ServiceTelInfoServiceImpl.java                         |    2 
 smartor/src/main/java/com/smartor/service/IHNGatherPatArchiveService.java                             |    2 
 smartor/src/main/java/com/smartor/domain/IvrLibaTargetVO.java                                         |    4 
 ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java                            |   28 
 ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml                                       |    2 
 smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java                           |   55 
 ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java                    |    1 
 smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java                         |  546 ++---
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceExternalController.java             |    7 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskController.java                 |   28 
 smartor/src/main/java/com/smartor/mapper/ServiceSubtaskMapper.java                                    |    4 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java                      |    3 
 smartor/src/main/java/com/smartor/service/impl/HNGatherPatArchiveServiceImpl.java                     |    8 
 ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/HospitalFilterInterceptor.java          |   44 
 smartor/src/main/java/com/smartor/domain/PatTaskRelevance.java                                        |    2 
 smartor/src/main/java/com/smartor/domain/ServiceSubtaskVO.java                                        |   11 
 ruoyi-common/src/main/java/com/ruoyi/common/utils/PageUtils.java                                      |   10 
 smartor/src/main/java/com/smartor/domain/SvyTaskTemplateScriptVO.java                                 |    7 
 smartor/src/main/java/com/smartor/service/IServiceSLTDHealthcareRecordService.java                    |   19 
 ruoyi-admin/src/main/resources/mybatis/mybatis-config.xml                                             |    2 
 ruoyi-admin/pom.xml                                                                                   |    5 
 smartor/src/main/java/com/smartor/domain/ServiceSLTDDeptReqVO.java                                    |   48 
 ruoyi-common/src/main/java/com/ruoyi/common/enums/ServiceFromEnum.java                                |    2 
 smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml                                    |  175 +
 /dev/null                                                                                             |   57 
 smartor/src/main/java/com/smartor/domain/PatMedInhospVO.java                                          |   23 
 ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java                                          |  862 +++++----
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java                      |   73 
 smartor/src/main/java/com/smartor/domain/ServiceSubtaskDetail.java                                    |    2 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java              |    5 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java                      |    5 
 smartor/src/main/resources/mapper/smartor/SysUserDeptMapper.xml                                       |    2 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSLTDHealthcareRecordController.java |   21 
 ruoyi-admin/src/main/resources/application-druid.yml                                                  |   42 
 ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java                       |   10 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/PatArchiveController.java                  |   25 
 smartor/src/main/java/com/smartor/service/IServiceTaskService.java                                    |    2 
 smartor/src/main/java/com/smartor/service/impl/CommonTaskServiceImpl.java                             |   40 
 84 files changed, 3,157 insertions(+), 1,850 deletions(-)

diff --git a/.idea/encodings.xml b/.idea/encodings.xml
index 19277dd..9166430 100644
--- a/.idea/encodings.xml
+++ b/.idea/encodings.xml
@@ -2,8 +2,30 @@
 <project version="4">
   <component name="Encoding">
     <file url="file://$PROJECT_DIR$/ruoyi-admin/src/main/java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskPreachformController.java" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/ruoyi-admin/src/main/resources" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/ruoyi-common/src/main/java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/ruoyi-common/src/main/java/com/ruoyi/common/dx/Hello.java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/ruoyi-common/src/main/java/com/ruoyi/common/dx/HelloResponse.java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/ruoyi-common/src/main/java/com/ruoyi/common/dx/I5GReply.java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/ruoyi-common/src/main/java/com/ruoyi/common/dx/I5GReplyResponse.java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/ruoyi-common/src/main/java/com/ruoyi/common/dx/I5GReport.java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/ruoyi-common/src/main/java/com/ruoyi/common/dx/I5GReportResponse.java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/ruoyi-common/src/main/java/com/ruoyi/common/dx/I5GSearchNumber.java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/ruoyi-common/src/main/java/com/ruoyi/common/dx/I5GSearchNumberResponse.java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/ruoyi-common/src/main/java/com/ruoyi/common/dx/I5GSend.java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/ruoyi-common/src/main/java/com/ruoyi/common/dx/I5GSendResponse.java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/ruoyi-common/src/main/java/com/ruoyi/common/dx/SMSGetNumberResponse.java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/ruoyi-common/src/main/java/com/ruoyi/common/dx/SMSGetTemplateList.java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/ruoyi-common/src/main/java/com/ruoyi/common/dx/SMSGetUserList.java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/ruoyi-common/src/main/java/com/ruoyi/common/dx/SMSGetUserListResponse.java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/ruoyi-common/src/main/java/com/ruoyi/common/dx/SMSSaveContent.java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/ruoyi-common/src/main/java/com/ruoyi/common/dx/SMSSaveContentResponse.java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/ruoyi-common/src/main/java/com/ruoyi/common/dx/SMSVerify.java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/ruoyi-common/src/main/java/com/ruoyi/common/dx/SMSVerifyPrivate.java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/ruoyi-common/src/main/java/com/ruoyi/common/dx/SMSVerifyPrivateResponse.java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/ruoyi-common/src/main/java/com/ruoyi/common/dx/SMSVerifyResponse.java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/ruoyi-common/src/main/java/com/ruoyi/common/dx/SmsServiceSoap.java" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/ruoyi-common/src/main/resources" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/ruoyi-framework/src/main/java" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/ruoyi-framework/src/main/resources" charset="UTF-8" />
@@ -14,8 +36,14 @@
     <file url="file://$PROJECT_DIR$/ruoyi-system/src/main/java" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/ruoyi-system/src/main/resources" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/smartor/src/main/java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/smartor/src/main/java/com/smartor/domain/ServiceSubtaskPreachform.java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskPreachformMapper.java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/smartor/src/main/java/com/smartor/service/IServiceSubtaskPreachformService.java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskPreachformServiceImpl.java" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/smartor/src/main/resources" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/smartor/src/main/resources/mapper/smartor/ServiceSubtaskPreachformMapper.xml" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
+    <file url="PROJECT" charset="GBK" />
   </component>
-</project>
\ No newline at end of file
+</project>
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
index 24d19a8..07de0f8 100644
--- a/.idea/jarRepositories.xml
+++ b/.idea/jarRepositories.xml
@@ -49,12 +49,12 @@
     <remote-repository>
       <option name="id" value="central" />
       <option name="name" value="central" />
-      <option name="url" value="http://maven.aliyun.com/nexus/content/groups/public/" />
+      <option name="url" value="http://repo2.maven.org/maven2/" />
     </remote-repository>
     <remote-repository>
       <option name="id" value="central" />
       <option name="name" value="central" />
-      <option name="url" value="http://repo2.maven.org/maven2/" />
+      <option name="url" value="http://maven.aliyun.com/nexus/content/groups/public/" />
     </remote-repository>
     <remote-repository>
       <option name="id" value="jcenter" />
@@ -97,4 +97,4 @@
       <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
     </remote-repository>
   </component>
-</project>
\ No newline at end of file
+</project>
diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml
index 8f2bf2c..0e049db 100644
--- a/ruoyi-admin/pom.xml
+++ b/ruoyi-admin/pom.xml
@@ -166,6 +166,11 @@
             <version>5.1.0</version>
         </dependency>
         <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-compress</artifactId>
+            <version>1.21</version>
+        </dependency>
+        <dependency>
             <groupId>cn.easyproject</groupId>
             <artifactId>orai18n</artifactId>
             <version>12.1.0.2.0</version>
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 f8cc3c4..8ed8bdb 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
@@ -5,6 +5,7 @@
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 import com.ruoyi.common.core.redis.RedisCache;
+import com.ruoyi.common.dx.MessageSend;
 import com.ruoyi.common.enums.MsgLSEnum;
 import com.ruoyi.common.enums.ServiceFromEnum;
 import com.ruoyi.common.enums.WxGZHEnum;
@@ -17,10 +18,7 @@
 import com.ruoyi.system.service.ISysConfigService;
 import com.smartor.common.LSHospTokenUtil;
 import com.smartor.domain.*;
-import com.smartor.mapper.HeLibraryMapper;
-import com.smartor.mapper.PatArchiveMapper;
-import com.smartor.mapper.ServiceSubtaskMapper;
-import com.smartor.mapper.ServiceTaskMapper;
+import com.smartor.mapper.*;
 import com.smartor.service.IBaseSmsaccountService;
 import com.smartor.service.IServiceOutPathService;
 import com.smartor.service.IServiceSubtaskRecordService;
@@ -36,6 +34,8 @@
 
 import java.io.IOException;
 import java.security.MessageDigest;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
@@ -65,6 +65,7 @@
     @Autowired
     private ServiceSubtaskMapper ivrTaskcallMapper;
 
+
     @Autowired
     private HeLibraryMapper heLibraryMapper;
 
@@ -84,13 +85,13 @@
     private ServiceSubtaskMapper serviceSubtaskMapper;
 
     @Autowired
+    private ServiceSubtaskPreachformMapper serviceSubtaskPreachformMapper;
+
+    @Autowired
     private IServiceSubtaskRecordService serviceSubtaskRecordService;
 
     @Autowired
     IBaseSmsaccountService baseSmsaccountService;
-
-    @Autowired
-    private ISysConfigService configService;
 
     @Value("${xhsmsPath}")
     private String xhsmsPath;
@@ -100,6 +101,9 @@
 
     @Value("${server.port}")
     private String port;
+
+    @Autowired
+    private ISysConfigService configService;
 
     // 鍒涘缓鍥哄畾澶у皬鐨勭嚎绋嬫睜
     private static final ExecutorService executorService = Executors.newFixedThreadPool(10);
@@ -166,536 +170,572 @@
         //鍒ゆ柇涓�涓媍ommonTaskcallMQ涓殑stopstate鏄惁涓巌vr_task涓殑涓�鑷达紝涓嶄竴鑷达紝鍒欒鏄庢槸鏆傚仠浜�
         ServiceTask ivrTask1 = ivrTaskMapper.selectServiceTaskByTaskid(commonTaskcallMQ.getTaskid());
 
-//        if (ivrTask1.getStopState() != commonTaskcallMQ.getStopState()) {
-//            //灏嗘秷鎭粠闃熷垪涓墧闄�
-//            return;
-//        }
+        //閫氳繃浠诲姟ID鎷垮埌鎮h�呬俊鎭�
+        ServiceSubtaskVO serviceSubtaskVO = new ServiceSubtaskVO();
+        serviceSubtaskVO.setTaskid(commonTaskcallMQ.getTaskid());
+        serviceSubtaskVO.setSendstate(2L);
+        List<ServiceSubtask> selectServiceSubtaskList = ivrTaskcallMapper.selectServiceSubtaskList(serviceSubtaskVO);
 
-        if (StringUtils.isNotEmpty(commonTaskcallMQ.getPreachform())) {
-            //濡備綍浠诲姟鍙戦�佹柟寮忎笉涓虹┖
-            String[] split = commonTaskcallMQ.getPreachform().split(",");
-            log.info("split鐨勫�间负锛歿}", split);
+        for (ServiceSubtask serviceSubtask : selectServiceSubtaskList) {
+            //鍏堝垽鏂偅鑰呮槸涓嶆槸杩樿鍙戦��
+            PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(serviceSubtask.getPatid());
+            if (!Objects.isNull(patArchive) && patArchive.getNotrequiredFlag() == "1") {
+                //涓嶉渶瑕佸彂閫�
+                serviceSubtask.setResult("鎮h�呬笉闇�瑕侀殢璁�");
+                serviceSubtask.setRemark(patArchive.getNotrequiredreason());
+                serviceSubtask.setSendstate(4L);
+                serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
+                setFailPreachForm(serviceSubtask, "-1", "涓嶉渶瑕佹墽琛�", "6");
+                continue;
+            }
 
-            //瀹氫箟涓�涓泦鍚堬紝鐢ㄤ笌瀛樻病鏈夋墽琛岀殑瀛愪换鍔D
-            List<Long> subIds = new ArrayList<>();
-            //涓存椂瀛樻病鏈夋墽琛岀殑瀛愪换鍔D
-            List<Long> lssubIds = new ArrayList<>();
-            //鏄惁灏嗗叏閮ㄦ偅鑰呰�呭彂閫佸畬
-            Boolean isSend = false;
+            ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform();
+            serviceSubtaskPreachform.setTaskid(serviceSubtask.getTaskid());
+            serviceSubtaskPreachform.setSubid(serviceSubtask.getId());
+            //鑾峰彇鍙戦�佹柟寮�
+            String sendPreachform = getSendPreachform(serviceSubtaskPreachform, serviceSubtask);
+            if (sendPreachform.equals("-1") || serviceSubtask.getSendstate() == 6 || serviceSubtask.getSendstate() == 5 || serviceSubtask.getSendstate() == 4) {
+                //璇存槑宸茬粡鍏ㄩ儴閬嶅巻瀹屼簡锛屽綋鍓嶇殑鎵ц鏂瑰紡搴忓彿鏄渶鍚庝竴涓簡   鎴栬��  璇ユ偅鑰呭凡缁忛殢璁跨粨鏉燂紙鎴愬姛鎴栧け璐ヤ簡鎴栦笉鎵ц锛�
+                continue;
+            }
 
-            aa:
-            for (String serviceFrom : split) {
-                String descByCode = ServiceFromEnum.getDescByCode(Integer.valueOf(serviceFrom));
-                if (isSend == true) {
-                    break aa;
-                }
+            String descByCode = ServiceFromEnum.getDescByCode(Integer.valueOf(sendPreachform));
+            if (descByCode.equals("鐢佃瘽")) {
+                try {
+                    ServiceTask ivrTask = ivrTaskMapper.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
+                    if (ivrTask.getSendState() != null && ivrTask.getSendState() == 3 || ivrTask.getSendState() != null && ivrTask.getSendState() == 4) {
+                        //濡備綍浠诲姟琚�滄殏鍋溾�濇垨鈥滅粓姝⑩��
+                        break;
+                    }
+                    if (org.apache.commons.lang3.StringUtils.isEmpty(serviceSubtask.getPhone())) {
+                        serviceSubtask.setCurrentPreachform(sendPreachform);
+                        serviceSubtask.setVisitTime(getNextVisitTime(serviceSubtask.getId(), serviceSubtask.getTaskid(), serviceSubtask.getVisitTime(), serviceSubtask.getCurrentPreachform()));
+                        serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
+                        setFailPreachForm(serviceSubtask, sendPreachform, "鎵嬫満鍙蜂负绌�", "4");
+                        continue;
+                    }
 
-                //閫氳繃浠诲姟ID鎷垮埌鎮h�呬俊鎭�
-                ServiceSubtaskVO ivrTaskcall = new ServiceSubtaskVO();
-                ivrTaskcall.setTaskid(commonTaskcallMQ.getTaskid());
-                ivrTaskcall.setSendstate(1L);
-                List<ServiceSubtask> selectServiceSubtaskList = ivrTaskcallMapper.selectServiceSubtaskList(ivrTaskcall);
-                if (CollectionUtils.isEmpty(selectServiceSubtaskList)) {
+                    //鑾峰彇鍒皏alue鍊兼渶灏戠殑key
+                    String key = getKey();
+                    if (commonTaskcallMQ.getSendType().equals("2")) {
+                        //璇存槑鏄珛鍗冲彂閫�
+                        List<String> list = new ArrayList<>();
+                        list.add(serviceSubtask.getId().toString());
+                        log.info("缂撳瓨涓璫ache-0鐨勫�间负锛歿}", list);
+                        redisCache.setCacheListLeftAndDistinct("cache-0", list);
+                    } else {
+                        //闈炵珛鍗冲彂閫�
+                        List<String> list = new ArrayList<>();
+                        list.add(serviceSubtask.getId().toString());
+                        redisCache.setCacheListLeftAndDistinct(key, list);
+                    }
+                } catch (Exception exception) {
+                    ServiceSubtaskRecord serviceSubtaskRecord = new ServiceSubtaskRecord();
+                    serviceSubtaskRecord.setTaskid(serviceSubtask.getTaskid().toString());
+                    serviceSubtaskRecord.setSubtaskId(serviceSubtask.getId());
+                    serviceSubtaskRecord.setUuid(UUID.randomUUID().toString());
+                    serviceSubtaskRecord.setTasktype(serviceSubtask.getType());
+                    serviceSubtaskRecord.setPreachform("3");
+                    serviceSubtaskRecord.setResult("fail");
+                    serviceSubtaskRecord.setStartTime(System.currentTimeMillis());
+                    serviceSubtaskRecord.setRemark("闃熷垪浠诲姟鐢佃瘽鍙戦�佸け璐�");
+                    log.error("闃熷垪浠诲姟鐢佃瘽鍙戦�佸け璐ワ細{}", exception.getMessage());
+                    serviceSubtaskRecordService.insertServiceSubtaskRecord(serviceSubtaskRecord);
+                    //灏嗙數璇濈姸鎬佽缃负澶辫触
+                    setFailPreachForm(serviceSubtask, sendPreachform, "闃熷垪浠诲姟鐢佃瘽鍙戦�佸け璐�", "5");
+
                     continue;
                 }
-                if (descByCode.equals("鐢佃瘽")) {
-                    for (ServiceSubtask serviceSubtask : selectServiceSubtaskList) {
-                        //鍏堝垽鏂竴涓嬶紝subIds鏄惁涓虹┖锛屽鏋滀笉涓虹┖锛屽彧鎵цsubIds閲岀殑鎮h��
-                        if (CollectionUtils.isNotEmpty(subIds)) {
-                            boolean contains = subIds.contains(serviceSubtask.getId());
-                            //濡傛灉contains涓嶄负true,璇存槑褰撳墠鐨勬偅鑰呭凡缁忓彂閫佹垚鍔燂紝鐩存帴寰幆涓嬩竴涓汉灏辫
-                            if (!contains) continue;
+                //鍦ㄥ瓙浠诲姟琛ㄩ噷璁板綍涓�涓�
+                setFailPreachForm(serviceSubtask, sendPreachform, "闃熷垪浠诲姟鐢佃瘽鍙戦�佹垚鍔�", "2");
+
+                //浠诲姟鍙戦�佽褰�
+                ServiceSubtaskRecord serviceSubtaskRecord = new ServiceSubtaskRecord();
+                serviceSubtaskRecord.setTaskid(serviceSubtask.getTaskid().toString());
+                serviceSubtaskRecord.setSubtaskId(serviceSubtask.getId());
+                serviceSubtaskRecord.setUuid(UUID.randomUUID().toString());
+                serviceSubtaskRecord.setTasktype(serviceSubtask.getType());
+                serviceSubtaskRecord.setPreachform("3");
+                serviceSubtaskRecord.setStartTime(System.currentTimeMillis());
+                serviceSubtaskRecord.setRemark("闃熷垪浠诲姟鐢佃瘽鍙戦�佹垚鍔�");
+                serviceSubtaskRecordService.insertServiceSubtaskRecord(serviceSubtaskRecord);
+
+            } else if (descByCode.equals("鐭俊")) {
+                //鐭俊
+                //瀵箄rl涓袱涓弬鏁板姞瀵�
+                RSAPublicKeyExample rsaPublicKeyExample = new RSAPublicKeyExample();
+                String taskId = rsaPublicKeyExample.encryptedData(ivrTask1.getTaskid().toString(), pub_key);
+
+                if (org.apache.commons.lang3.StringUtils.isEmpty(serviceSubtask.getPhone())) {
+                    setFailPreachForm(serviceSubtask, sendPreachform, "鎵嬫満鍙蜂负绌�", "4");
+                    continue;
+                }
+
+                try {
+                    String patid = rsaPublicKeyExample.encryptedData(serviceSubtask.getPatid().toString(), pub_key);
+                    String subId = rsaPublicKeyExample.encryptedData(serviceSubtask.getId().toString(), pub_key);
+                    SendMagParam sendMagParam = new SendMagParam();
+                    sendMagParam.setType("4");
+                    if (type == 1) {
+                        //闅忚
+                        ServiceOutPath serviceOutPath = new ServiceOutPath();
+                        serviceOutPath.setParam1(taskId);
+                        serviceOutPath.setParam2(patid);
+                        serviceOutPath.setParam6(subId);
+                        serviceOutPath.setCreateTime(new Date());
+                        iServiceOutPathService.insertServiceOutPath(serviceOutPath);
+//                                sendMagParam.setUrl(ip + ":" + req_path + "/followvisit/particty?param1=" + taskId + "&param2=" + patid + "&param5=false");
+                        //杞垚16杩涘埗
+                        String format = String.format("%03X", serviceOutPath.getId());
+                        serviceOutPath.setRadix(format);
+                        serviceOutPath.setUpdateTime(new Date());
+                        iServiceOutPathService.updateServiceOutPath(serviceOutPath);
+                        sendMagParam.setPhone(serviceSubtask.getPhone());
+                        sendMagParam.setUrl(ip + ":" + req_path + "/sf?p=" + format);
+                        if (visitHosp == 2) {
+                            sendMagParam.setContent("鎮ㄥソ锛岄個璇锋偍濉啓鍑洪櫌瀹f暀璋冩煡琛紝璇风偣鍑�" + sendMagParam.getUrl() + "鏌ョ湅銆傛劅璋㈡偍閰嶅悎锛�");
+                        } else if (visitHosp == 1) {
+                            sendMagParam.setContent("銆愭柊鍗庡尰闄€�戞偍濂斤紝閭�璇锋偍濉啓鍑洪櫌闅忚璋冩煡琛紝璇风偣鍑�" + sendMagParam.getUrl() + "濉啓銆傛劅璋㈡偍閰嶅悎锛�");
                         }
 
-                        try {
-                            ServiceTask ivrTask = ivrTaskMapper.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
-                            if (ivrTask.getSendState() != null && ivrTask.getSendState() == 3 || ivrTask.getSendState() != null && ivrTask.getSendState() == 4) {
-                                //濡備綍浠诲姟琚�滄殏鍋溾�濇垨鈥滅粓姝⑩��
-                                break;
-                            }
-                            //鑾峰彇鍒皏alue鍊兼渶灏戠殑key
-                            String key = getKey();
-                            if (commonTaskcallMQ.getSendType().equals("2")) {
-                                //璇存槑鏄珛鍗冲彂閫�
-                                ServiceSubtaskVO serviceSubtask1 = new ServiceSubtaskVO();
-                                serviceSubtask1.setTaskid(commonTaskcallMQ.getTaskid());
-                                log.info("缂撳瓨涓璼erviceSubtask1鐨勫�间负锛歿}", serviceSubtask1);
-                                List<String> list = new ArrayList<>();
-                                List<ServiceSubtask> selectServiceSubtaskList1 = ivrTaskcallMapper.selectServiceSubtaskList(serviceSubtask1);
-                                for (ServiceSubtask serviceSubtask2 : selectServiceSubtaskList1) {
-                                    list.add(serviceSubtask2.getId().toString());
-                                }
-                                log.info("缂撳瓨涓璫ache-0鐨勫�间负锛歿}", list);
-//                                redisCache.setCacheListLeft("cache-0", list);
-                                redisCache.setCacheListLeftAndDistinct("cache-0", list);
-                            } else {
-                                //闈炵珛鍗冲彂閫�
-                                ServiceSubtaskVO serviceSubtask1 = new ServiceSubtaskVO();
-                                serviceSubtask1.setTaskid(commonTaskcallMQ.getTaskid());
-                                List<ServiceSubtask> selectServiceSubtaskList1 = ivrTaskcallMapper.selectServiceSubtaskList(serviceSubtask1);
-                                List<String> list = new ArrayList<>();
-                                for (ServiceSubtask serviceSubtask2 : selectServiceSubtaskList1) {
-                                    list.add(serviceSubtask2.getId().toString());
-                                }
-//                                redisCache.setCacheListLeft(key, list);
-                                redisCache.setCacheListLeftAndDistinct(key, list);
-                            }
-                        } catch (Exception exception) {
-                            ServiceSubtaskRecord serviceSubtaskRecord = new ServiceSubtaskRecord();
-                            serviceSubtaskRecord.setTaskid(serviceSubtask.getTaskid().toString());
-                            serviceSubtaskRecord.setSubtaskId(serviceSubtask.getId());
-                            serviceSubtaskRecord.setUuid(UUID.randomUUID().toString());
-                            serviceSubtaskRecord.setTasktype(serviceSubtask.getType());
-                            serviceSubtaskRecord.setPreachform("3");
-                            serviceSubtaskRecord.setResult("fail");
-                            serviceSubtaskRecord.setStartTime(System.currentTimeMillis());
-                            serviceSubtaskRecord.setRemark("闃熷垪浠诲姟鐢佃瘽鍙戦�佸け璐�");
-                            log.error("闃熷垪浠诲姟鐢佃瘽鍙戦�佸け璐ワ細{}", exception.getMessage());
-                            lssubIds.add(serviceSubtask.getId());
-                            serviceSubtaskRecordService.insertServiceSubtaskRecord(serviceSubtaskRecord);
+                    } else if (type == 2) {
+                        //闂埜锛堥棶棰橈級
+                        ServiceOutPath serviceOutPath = new ServiceOutPath();
+                        serviceOutPath.setParam1(taskId);
+                        serviceOutPath.setParam2(patid);
+                        serviceOutPath.setParam6(subId);
+//                                serviceOutPath.setParam3(URLEncoder.encode(ivrTask1.getTaskName(), StandardCharsets.UTF_8.toString()));
+                        serviceOutPath.setParam3(ivrTask1.getTaskName());
+                        serviceOutPath.setCreateTime(new Date());
+                        iServiceOutPathService.insertServiceOutPath(serviceOutPath);
+                        String format = String.format("%03X", serviceOutPath.getId());
+                        serviceOutPath.setRadix(format);
+                        serviceOutPath.setUpdateTime(new Date());
+                        iServiceOutPathService.updateServiceOutPath(serviceOutPath);
+//                                sendMagParam.setUrl(ip + ":" + req_path + "/outsideChainwt?param1=" + taskId + "&param2=" + patid + "&param3=" + URLEncoder.encode(ivrTask1.getTaskName(), StandardCharsets.UTF_8.toString()) + "&param5=false");
+                        sendMagParam.setPhone(serviceSubtask.getPhone());
+                        sendMagParam.setUrl(ip + ":" + req_path + "/wt?p=" + format);
+                        //濡傛灉type鏄闊抽殢璁跨殑璇濓紙璇存槑琛ュ伩鍙戦�佹柟寮忎腑鏈夌數璇濋殢璁跨殑鏂瑰紡锛岃繖閲岀殑澶栭摼灏卞湴鍧�鍙兘鐢�/sf锛�
+                        if (serviceSubtask.getType().equals("1"))
+                            sendMagParam.setUrl(ip + ":" + req_path + "/sf?p=" + format);
+                        if (serviceSubtask.getOrgid().equals("47255004333112711A1001")) {
+                            sendMagParam.setContent("銆愭櫙瀹佺暡鏃忚嚜娌诲幙浜烘皯鍖婚櫌銆戞偍濂斤紝閭�璇锋偍濉啓鍑洪櫌瀹f暀璋冩煡琛紝璇风偣鍑�" + sendMagParam.getUrl() + "鏌ョ湅銆傛劅璋㈡偍閰嶅悎锛�");
+                        } else if (serviceSubtask.getOrgid().equals("47255004333112711A1001")) {
+                            sendMagParam.setContent("銆愪附姘翠腑鍖婚櫌銆戞偍濂斤紝閭�璇锋偍濉啓鍑洪櫌瀹f暀璋冩煡琛紝璇风偣鍑�" + sendMagParam.getUrl() + "鏌ョ湅銆傛劅璋㈡偍閰嶅悎锛�");
+                        } else sendMagParam.setContent("銆愭柊鍗庡尰闄€�戞偍濂斤紝閭�璇锋偍濉啓鍑洪櫌璋冩煡琛紝璇风偣鍑�" + sendMagParam.getUrl() + "濉啓銆傛劅璋㈡偍閰嶅悎锛�");
+                    } else if (type == 3) {
+                        //瀹f暀
+                        ServiceOutPath serviceOutPath = new ServiceOutPath();
+                        serviceOutPath.setParam1(taskId);
+                        serviceOutPath.setParam2(patid);
+                        serviceOutPath.setParam6(subId);
+                        serviceOutPath.setParam3(ivrTask1.getTaskName());
+                        serviceOutPath.setCreateTime(new Date());
+                        iServiceOutPathService.insertServiceOutPath(serviceOutPath);
+                        String format = String.format("%03X", serviceOutPath.getId());
+                        serviceOutPath.setRadix(format);
+                        serviceOutPath.setUpdateTime(new Date());
+                        iServiceOutPathService.updateServiceOutPath(serviceOutPath);
+                        //闇�瑕侀�氳繃妯℃澘ID鍘诲垽鏂鍙戠殑鍐呭鏄鏁欒繕鏄�氱煡
+                        HeLibrary heLibrary = heLibraryMapper.selectHeLibraryById(serviceSubtask.getLibtemplateid());
+                        if (heLibrary.getHetype().equals("1")) {
+                            sendMagParam.setPhone(serviceSubtask.getPhone());
+                            sendMagParam.setUrl(ip + ":" + req_path + "/xj?p=" + format);
+                            if (serviceSubtask.getOrgid().equals("47255004333112711A1001")) {
+                                sendMagParam.setContent("銆愭櫙瀹佺暡鏃忚嚜娌诲幙浜烘皯鍖婚櫌銆戞偍濂斤紝閭�璇锋偍濉啓鍑洪櫌瀹f暀璋冩煡琛紝璇风偣鍑�" + sendMagParam.getUrl() + "鏌ョ湅銆傛劅璋㈡偍閰嶅悎锛�");
+                            } else if (serviceSubtask.getOrgid().equals("47255004333112711A1001")) {
+                                sendMagParam.setContent("銆愪附姘翠腑鍖婚櫌銆戞偍濂斤紝閭�璇锋偍濉啓鍑洪櫌瀹f暀璋冩煡琛紝璇风偣鍑�" + sendMagParam.getUrl() + "鏌ョ湅銆傛劅璋㈡偍閰嶅悎锛�");
+                            } else
+                                sendMagParam.setContent("銆愭柊鍗庡尰闄€�戞偍濂斤紝閭�璇锋偍濉啓鍑洪櫌瀹f暀璋冩煡琛紝璇风偣鍑�" + sendMagParam.getUrl() + "鏌ョ湅銆傛劅璋㈡偍閰嶅悎锛�");
+                        } else {
+                            //閫氱煡
+                            sendMagParam.setPhone(serviceSubtask.getPhone());
+                            sendMagParam.setContent(heLibrary.getPreachcontent());
+                        }
+                    }
+
+                    //鐭俊杩橀渶瑕佹ā鏉�
+                    String s = null;
+                    if (visitHosp == 1) {
+                        //鏂板崕鐨勭煭淇″彂閫佹柟寮�
+                        Map<String, String> req = new HashMap<>();
+                        req.put("phone", sendMagParam.getPhone());
+                        req.put("content", sendMagParam.getContent());
+                        s = HttpUtil.postJsonRequest(xhsmsPath, new Gson().toJson(req));
+                    } else if (visitHosp == 2) {
+                        String url = configService.selectConfigByKey("token.360", serviceSubtask.getOrgid());
+                        //涓芥按鐨勭煭淇″彂閫佹柟寮�
+                        Map<String, String> map = MsgLSEnum.getAddressByCode(serviceSubtask.getOrgid());
+                        String token = LSHospTokenUtil.getToken(serviceSubtask.getOrgid(), url);
+                        log.info("-----------token鐨勫�间负锛歿}", token);
+                        if (ObjectUtils.isNotEmpty(map) && StringUtils.isEmpty(map.get("address"))) {
+                            serviceSubtask.setCurrentPreachform(sendPreachform);
+                            serviceSubtask.setVisitTime(getNextVisitTime(serviceSubtask.getId(), serviceSubtask.getTaskid(), serviceSubtask.getVisitTime(), serviceSubtask.getCurrentPreachform()));
+                            setFailPreachForm(serviceSubtask, descByCode, "鐭俊鍙戦�佸け璐�,璇ユ満鏋勬病鏈夐厤缃煭淇″湴鍧�", "5");
+                            serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
                             continue;
                         }
+                        log.info("---------mq涓芥按鐭俊鍙戦�佸叆鍙俛ddress锛歿},  sendMagParam:{},  orgid:{}-------", map.get("address"), sendMagParam, serviceSubtask.getOrgid());
+                        String dxCode = getDXCode(map.get("address"), sendMagParam.getPhone(), sendMagParam.getContent(), map.get("sendPersonId"), map.get("sendPersonName"), MsgLSEnum.getHeaderByCode(serviceSubtask.getOrgid()), token);
+                        log.info("---------涓芥按鐭俊鍙戦�佺粨鏋滐細{}-------", dxCode);
+                        ObjectMapper objectMapper = new ObjectMapper();
+                        Map<String, Object> textParam = objectMapper.readValue(dxCode, Map.class);
+                        String code = textParam.get("Code").toString();
+                        if (code.equals("0")) {
+                            s = "true";
+                        } else {
+                            setFailPreachForm(serviceSubtask, sendPreachform, "鐭俊鍙戦�佸け璐�", "5");
+                            throw new BaseException("鐭俊鍙戦�佸け璐�");
+                        }
+                    } else if (visitHosp == 3) {
+                        //鐪佺珛鍚屽痉鐨勭煭淇″彂閫佹柟寮�
+                        JSONObject data = MessageSend.sendMsg(sendMagParam.getContent(), "2", sendMagParam.getPhone(), LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
+                        String code = data.get("code").toString();
+                        if (StringUtils.isNotEmpty(code) && code.equals("00000")) {
+                            s = "true";
+                        } else {
+                            setFailPreachForm(serviceSubtask, sendPreachform, "鐭俊鍙戦�佸け璐�", "5");
+                            throw new BaseException("鐭俊鍙戦�佸け璐�");
+                        }
+                    }
+                    if (s.equals("true")) {
                         //鍦ㄥ瓙浠诲姟琛ㄩ噷璁板綍涓�涓�
-                        String uuid = UUID.randomUUID().toString();
-                        serviceSubtask.setResult("success");
-                        serviceSubtask.setRemark("闃熷垪浠诲姟鐢佃瘽鍙戦�佹垚鍔�");
-                        serviceSubtask.setGuid(uuid);
-                        serviceSubtask.setSendstate(3L);
-                        serviceSubtask.setFinishtime(new Date());
-                        serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
-
+                        setFailPreachForm(serviceSubtask, sendPreachform, "鐭俊鍙戦�佹垚鍔�", "2");
                         //浠诲姟鍙戦�佽褰�
                         ServiceSubtaskRecord serviceSubtaskRecord = new ServiceSubtaskRecord();
                         serviceSubtaskRecord.setTaskid(serviceSubtask.getTaskid().toString());
                         serviceSubtaskRecord.setSubtaskId(serviceSubtask.getId());
-                        serviceSubtaskRecord.setUuid(uuid);
+                        serviceSubtaskRecord.setUuid(UUID.randomUUID().toString());
                         serviceSubtaskRecord.setTasktype(serviceSubtask.getType());
-                        serviceSubtaskRecord.setPreachform("3");
+                        serviceSubtaskRecord.setPreachform("5");
                         serviceSubtaskRecord.setStartTime(System.currentTimeMillis());
-                        serviceSubtaskRecord.setRemark("闃熷垪浠诲姟鐢佃瘽鍙戦�佹垚鍔�");
+                        serviceSubtaskRecord.setResult("success");
+                        serviceSubtaskRecord.setRemark("鐭俊鍙戦�佹垚鍔�");
                         serviceSubtaskRecordService.insertServiceSubtaskRecord(serviceSubtaskRecord);
+                        log.error("serviceSubtaskRecord淇濆瓨鎴愬姛浜嗗悧锛燂細{}", serviceSubtaskRecord);
+                    } else {
+                        //鍦ㄥ瓙浠诲姟琛ㄩ噷璁板綍涓�涓�
+                        setFailPreachForm(serviceSubtask, sendPreachform, "鐭俊鍙戦�佸け璐�", "5");
                     }
-                    if (CollectionUtils.isEmpty(lssubIds)) {
-                        //濡傛灉鈥滀复鏃跺瓙浠诲姟鈥濅负绌猴紝璇存槑鍏ㄥ彂閫佸畬浜�
-                        isSend = true;
-                    }
-                    //灏嗗瓙浠诲姟ID娓呯┖锛屽皢鈥滀复鏃跺瓙浠诲姟鈥濇暟鎹� 鏀惧埌 鈥滃瓙浠诲姟鈥� 涓�
-                    subIds.clear();
-                    subIds.addAll(lssubIds);
-                    lssubIds.clear();
-                } else if (descByCode.equals("澶氬獟浣�")) {
-                    //澶氬獟浣�
+                } catch (Exception e) {
+                    ServiceSubtaskRecord serviceSubtaskRecord = new ServiceSubtaskRecord();
+                    serviceSubtaskRecord.setTaskid(serviceSubtask.getTaskid().toString());
+                    serviceSubtaskRecord.setSubtaskId(serviceSubtask.getId());
+                    serviceSubtaskRecord.setUuid(UUID.randomUUID().toString());
+                    serviceSubtaskRecord.setTasktype(serviceSubtask.getType());
+                    serviceSubtaskRecord.setPreachform("4");
+                    serviceSubtaskRecord.setResult("fail");
+                    serviceSubtaskRecord.setStartTime(System.currentTimeMillis());
+                    serviceSubtaskRecord.setRemark("鐭俊鍙戦�佸け璐�");
+                    log.error("鐭俊鍙戦�佸け璐ワ細{}", e.getMessage());
+                    serviceSubtaskRecordService.insertServiceSubtaskRecord(serviceSubtaskRecord);
+                    setFailPreachForm(serviceSubtask, sendPreachform, "鐭俊鍙戦�佸け璐�", "5");
                     continue;
-                } else if (descByCode.equals("绾歌川")) {
-                    //绾歌川
-                    continue;
-                } else if (descByCode.equals("鐭俊")) {
-                    //鐭俊
-                    //瀵箄rl涓袱涓弬鏁板姞瀵�
-                    RSAPublicKeyExample rsaPublicKeyExample = new RSAPublicKeyExample();
-                    String taskId = rsaPublicKeyExample.encryptedData(ivrTask1.getTaskid().toString(), pub_key);
+                }
 
-                    for (ServiceSubtask serviceSubtask : selectServiceSubtaskList) {
-                        //鍏堝垽鏂竴涓嬶紝subIds鏄惁涓虹┖锛屽鏋滀笉涓虹┖锛屽彧鎵цsubIds閲岀殑鎮h��
-                        if (CollectionUtils.isNotEmpty(subIds)) {
-                            boolean contains = subIds.contains(serviceSubtask.getId());
-                            //濡傛灉contains涓嶄负true,璇存槑褰撳墠鐨勬偅鑰呭凡缁忓彂閫佹垚鍔燂紝鐩存帴寰幆涓嬩竴涓汉灏辫
-                            if (!contains) continue;
-                        }
+            } else if (descByCode.equals("鍏紬鍙�")) {
+                //鍏紬鍙�
+                RSAPublicKeyExample rsaPublicKeyExample = new RSAPublicKeyExample();
+                String taskId = rsaPublicKeyExample.encryptedData(ivrTask1.getTaskid().toString(), pub_key);
+                String patid = rsaPublicKeyExample.encryptedData(serviceSubtask.getPatid().toString(), pub_key);
 
-                        try {
-                            String patid = rsaPublicKeyExample.encryptedData(serviceSubtask.getPatid().toString(), pub_key);
-                            String subId = rsaPublicKeyExample.encryptedData(serviceSubtask.getId().toString(), pub_key);
-                            SendMagParam sendMagParam = new SendMagParam();
-                            sendMagParam.setType("4");
-                            if (type == 1) {
-                                //闅忚
-                                ServiceOutPath serviceOutPath = new ServiceOutPath();
-                                serviceOutPath.setParam1(taskId);
-                                serviceOutPath.setParam2(patid);
-                                serviceOutPath.setParam6(subId);
-                                serviceOutPath.setCreateTime(new Date());
-                                iServiceOutPathService.insertServiceOutPath(serviceOutPath);
-//                                sendMagParam.setUrl(ip + ":" + req_path + "/followvisit/particty?param1=" + taskId + "&param2=" + patid + "&param5=false");
-                                //杞垚16杩涘埗
-                                String format = String.format("%03X", serviceOutPath.getId());
-                                serviceOutPath.setRadix(format);
-                                serviceOutPath.setUpdateTime(new Date());
-                                iServiceOutPathService.updateServiceOutPath(serviceOutPath);
-                                sendMagParam.setPhone(serviceSubtask.getPhone());
-                                sendMagParam.setUrl(ip + ":" + req_path + "/sf?p=" + format);
-                                if (visitHosp == 2) {
-                                    sendMagParam.setContent("鎮ㄥソ锛岄個璇锋偍濉啓鍑洪櫌瀹f暀璋冩煡琛紝璇风偣鍑�" + sendMagParam.getUrl() + "鏌ョ湅銆傛劅璋㈡偍閰嶅悎锛�");
-                                } else if (visitHosp == 1) {
-                                    sendMagParam.setContent("銆愭柊鍗庡尰闄€�戞偍濂斤紝閭�璇锋偍濉啓鍑洪櫌闅忚璋冩煡琛紝璇风偣鍑�" + sendMagParam.getUrl() + "濉啓銆傛劅璋㈡偍閰嶅悎锛�");
-                                }
-
-                            } else if (type == 2) {
-                                //闂埜锛堥棶棰橈級
-                                ServiceOutPath serviceOutPath = new ServiceOutPath();
-                                serviceOutPath.setParam1(taskId);
-                                serviceOutPath.setParam2(patid);
-                                serviceOutPath.setParam6(subId);
-//                                serviceOutPath.setParam3(URLEncoder.encode(ivrTask1.getTaskName(), StandardCharsets.UTF_8.toString()));
-                                serviceOutPath.setParam3(ivrTask1.getTaskName());
-                                serviceOutPath.setCreateTime(new Date());
-                                iServiceOutPathService.insertServiceOutPath(serviceOutPath);
-                                String format = String.format("%03X", serviceOutPath.getId());
-                                serviceOutPath.setRadix(format);
-                                serviceOutPath.setUpdateTime(new Date());
-                                iServiceOutPathService.updateServiceOutPath(serviceOutPath);
-//                                sendMagParam.setUrl(ip + ":" + req_path + "/outsideChainwt?param1=" + taskId + "&param2=" + patid + "&param3=" + URLEncoder.encode(ivrTask1.getTaskName(), StandardCharsets.UTF_8.toString()) + "&param5=false");
-                                sendMagParam.setPhone(serviceSubtask.getPhone());
-                                sendMagParam.setUrl(ip + ":" + req_path + "/wt?p=" + format);
-                                if (serviceSubtask.getOrgid().equals("47255004333112711A1001")) {
-                                    sendMagParam.setContent("銆愭櫙瀹佺暡鏃忚嚜娌诲幙浜烘皯鍖婚櫌銆戞偍濂斤紝閭�璇锋偍濉啓鍑洪櫌瀹f暀璋冩煡琛紝璇风偣鍑�" + sendMagParam.getUrl() + "鏌ョ湅銆傛劅璋㈡偍閰嶅悎锛�");
-                                } else if (serviceSubtask.getOrgid().equals("47255004333112711A1001")) {
-                                    sendMagParam.setContent("銆愪附姘翠腑鍖婚櫌銆戞偍濂斤紝閭�璇锋偍濉啓鍑洪櫌瀹f暀璋冩煡琛紝璇风偣鍑�" + sendMagParam.getUrl() + "鏌ョ湅銆傛劅璋㈡偍閰嶅悎锛�");
-                                } else
-                                    sendMagParam.setContent("銆愭柊鍗庡尰闄€�戞偍濂斤紝閭�璇锋偍濉啓鍑洪櫌璋冩煡琛紝璇风偣鍑�" + sendMagParam.getUrl() + "濉啓銆傛劅璋㈡偍閰嶅悎锛�");
-                            } else if (type == 3) {
-                                //瀹f暀
-                                ServiceOutPath serviceOutPath = new ServiceOutPath();
-                                serviceOutPath.setParam1(taskId);
-                                serviceOutPath.setParam2(patid);
-                                serviceOutPath.setParam6(subId);
-                                serviceOutPath.setParam3(ivrTask1.getTaskName());
-                                serviceOutPath.setCreateTime(new Date());
-                                iServiceOutPathService.insertServiceOutPath(serviceOutPath);
-                                String format = String.format("%03X", serviceOutPath.getId());
-                                serviceOutPath.setRadix(format);
-                                serviceOutPath.setUpdateTime(new Date());
-                                iServiceOutPathService.updateServiceOutPath(serviceOutPath);
-                                //闇�瑕侀�氳繃妯℃澘ID鍘诲垽鏂鍙戠殑鍐呭鏄鏁欒繕鏄�氱煡
-                                HeLibrary heLibrary = heLibraryMapper.selectHeLibraryById(serviceSubtask.getLibtemplateid());
-                                if (heLibrary.getHetype().equals("1")) {
-                                    sendMagParam.setPhone(serviceSubtask.getPhone());
-                                    sendMagParam.setUrl(ip + ":" + req_path + "/xj?p=" + format);
-                                    if (serviceSubtask.getOrgid().equals("47255004333112711A1001")) {
-                                        sendMagParam.setContent("銆愭櫙瀹佺暡鏃忚嚜娌诲幙浜烘皯鍖婚櫌銆戞偍濂斤紝閭�璇锋偍濉啓鍑洪櫌瀹f暀璋冩煡琛紝璇风偣鍑�" + sendMagParam.getUrl() + "鏌ョ湅銆傛劅璋㈡偍閰嶅悎锛�");
-                                    } else if (serviceSubtask.getOrgid().equals("47255004333112711A1001")) {
-                                        sendMagParam.setContent("銆愪附姘翠腑鍖婚櫌銆戞偍濂斤紝閭�璇锋偍濉啓鍑洪櫌瀹f暀璋冩煡琛紝璇风偣鍑�" + sendMagParam.getUrl() + "鏌ョ湅銆傛劅璋㈡偍閰嶅悎锛�");
-                                    } else
-                                        sendMagParam.setContent("銆愭柊鍗庡尰闄€�戞偍濂斤紝閭�璇锋偍濉啓鍑洪櫌瀹f暀璋冩煡琛紝璇风偣鍑�" + sendMagParam.getUrl() + "鏌ョ湅銆傛劅璋㈡偍閰嶅悎锛�");
-                                } else {
-                                    //閫氱煡
-                                    sendMagParam.setPhone(serviceSubtask.getPhone());
-                                    sendMagParam.setContent(heLibrary.getPreachcontent());
-                                }
-                            }
-                            //鐭俊杩橀渶瑕佹ā鏉�
-                            String s = null;
-                            if (visitHosp == 1) {
-                                //鏂板崕鐨勭煭淇″彂閫佹柟寮�
-                                Map<String, String> req = new HashMap<>();
-                                req.put("phone", sendMagParam.getPhone());
-                                req.put("content", sendMagParam.getContent());
-                                s = HttpUtil.postJsonRequest(xhsmsPath, new Gson().toJson(req));
-                            } else if (visitHosp == 2) {
-                                String url = configService.selectConfigByKey("token.360",serviceSubtask.getOrgid());
-                                //涓芥按鐨勭煭淇″彂閫佹柟寮�
-                                Map<String, String> map = MsgLSEnum.getAddressByCode(serviceSubtask.getOrgid());
-                                String token = LSHospTokenUtil.getToken(serviceSubtask.getOrgid(),url);
-                                log.info("-----------token鐨勫�间负锛歿}", token);
-                                if (ObjectUtils.isNotEmpty(map) && StringUtils.isEmpty(map.get("address"))) {
-                                    ServiceSubtask ss = new ServiceSubtask();
-                                    ss.setResult("error");
-                                    ss.setRemark("鐭俊鍙戦�佸け璐�,璇ユ満鏋勬病鏈夐厤缃煭淇″湴鍧�");
-                                    ss.setSendstate(5L);
-                                    ss.setId(serviceSubtask.getId());
-//                                    ss.setFinishtime(new Date());
-                                    serviceSubtaskMapper.updateServiceSubtask(ss);
-                                    continue;
-                                }
-                                log.info("---------mq涓芥按鐭俊鍙戦�佸叆鍙俛ddress锛歿},  sendMagParam:{},  orgid:{}-------", map.get("address"), sendMagParam, serviceSubtask.getOrgid());
-                                String dxCode = getDXCode(map.get("address"), sendMagParam.getPhone(), sendMagParam.getContent(), map.get("sendPersonId"), map.get("sendPersonName"), MsgLSEnum.getHeaderByCode(serviceSubtask.getOrgid()), token);
-                                log.info("---------涓芥按鐭俊鍙戦�佺粨鏋滐細{}-------", dxCode);
-                                ObjectMapper objectMapper = new ObjectMapper();
-                                Map<String, Object> textParam = objectMapper.readValue(dxCode, Map.class);
-                                String code = textParam.get("Code").toString();
-                                if (code.equals("0")) {
-                                    s = "true";
-                                } else {
-                                    throw new BaseException(null);
-                                }
-                            }
-                            if (s.equals("true")) {
-                                //鍦ㄥ瓙浠诲姟琛ㄩ噷璁板綍涓�涓�
-                                String uuid = UUID.randomUUID().toString();
-                                serviceSubtask.setResult("success");
-                                serviceSubtask.setRemark("鐭俊鍙戦�佹垚鍔�");
-                                serviceSubtask.setGuid(uuid);
-                                serviceSubtask.setSendstate(3L);
-                                serviceSubtask.setFinishtime(new Date());
-                                serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
-
-                                //浠诲姟鍙戦�佽褰�
-                                ServiceSubtaskRecord serviceSubtaskRecord = new ServiceSubtaskRecord();
-                                serviceSubtaskRecord.setTaskid(serviceSubtask.getTaskid().toString());
-                                serviceSubtaskRecord.setSubtaskId(serviceSubtask.getId());
-                                serviceSubtaskRecord.setUuid(uuid);
-                                serviceSubtaskRecord.setTasktype(serviceSubtask.getType());
-                                serviceSubtaskRecord.setPreachform("5");
-                                serviceSubtaskRecord.setStartTime(System.currentTimeMillis());
-                                serviceSubtaskRecord.setResult("success");
-                                serviceSubtaskRecord.setRemark("鐭俊鍙戦�佹垚鍔�");
-                                serviceSubtaskRecordService.insertServiceSubtaskRecord(serviceSubtaskRecord);
-                                log.error("serviceSubtaskRecord淇濆瓨鎴愬姛浜嗗悧锛燂細{}", serviceSubtaskRecord);
-                            }
-                        } catch (Exception e) {
-                            ServiceSubtaskRecord serviceSubtaskRecord = new ServiceSubtaskRecord();
-                            serviceSubtaskRecord.setTaskid(serviceSubtask.getTaskid().toString());
-                            serviceSubtaskRecord.setSubtaskId(serviceSubtask.getId());
-                            serviceSubtaskRecord.setUuid(UUID.randomUUID().toString());
-                            serviceSubtaskRecord.setTasktype(serviceSubtask.getType());
-                            serviceSubtaskRecord.setPreachform("4");
-                            serviceSubtaskRecord.setResult("fail");
-                            serviceSubtaskRecord.setStartTime(System.currentTimeMillis());
-                            serviceSubtaskRecord.setRemark("鐭俊鍙戦�佸け璐�");
-                            log.error("鐭俊鍙戦�佸け璐ワ細{}", e.getMessage());
-                            lssubIds.add(serviceSubtask.getId());
-                            serviceSubtaskRecordService.insertServiceSubtaskRecord(serviceSubtaskRecord);
-                            continue;
-                        }
-
-
+                try {
+                    SendMagParam sendMagParam = new SendMagParam();
+                    sendMagParam.setType("5");
+                    String url = null;
+                    Boolean aBoolean = false;
+                    if (type == 1) {
+                        //闅忚
+                        ServiceOutPath serviceOutPath = new ServiceOutPath();
+                        serviceOutPath.setParam1(taskId);
+                        serviceOutPath.setParam2(patid);
+                        serviceOutPath.setCreateTime(new Date());
+                        iServiceOutPathService.insertServiceOutPath(serviceOutPath);
+                        String format = String.format("%03X", serviceOutPath.getId());
+                        serviceOutPath.setRadix(format);
+                        serviceOutPath.setUpdateTime(new Date());
+                        iServiceOutPathService.updateServiceOutPath(serviceOutPath);
+                        url = ip + ":" + req_path + "/sf?p=" + format;
+                    } else if (type == 2) {
+                        //闂埜
+                        ServiceOutPath serviceOutPath = new ServiceOutPath();
+                        serviceOutPath.setParam1(taskId);
+                        serviceOutPath.setParam2(patid);
+                        serviceOutPath.setParam3(ivrTask1.getTaskName());
+                        serviceOutPath.setCreateTime(new Date());
+                        iServiceOutPathService.insertServiceOutPath(serviceOutPath);
+                        String format = String.format("%03X", serviceOutPath.getId());
+                        serviceOutPath.setRadix(format);
+                        serviceOutPath.setUpdateTime(new Date());
+                        iServiceOutPathService.updateServiceOutPath(serviceOutPath);
+                        url = ip + ":" + req_path + "/wt?p=" + format;
+                        //濡傛灉type鏄闊抽殢璁跨殑璇濓紙璇存槑琛ュ伩鍙戦�佹柟寮忎腑鏈夌數璇濋殢璁跨殑鏂瑰紡锛岃繖閲岀殑澶栭摼灏卞湴鍧�鍙兘鐢�/sf锛�
+                        if (serviceSubtask.getType().equals("1"))
+                            sendMagParam.setUrl(ip + ":" + req_path + "/sf?p=" + format);
+                    } else if (type == 3) {
+                        //瀹f暀
+                        ServiceOutPath serviceOutPath = new ServiceOutPath();
+                        serviceOutPath.setParam1(taskId);
+                        serviceOutPath.setParam2(patid);
+                        serviceOutPath.setParam3(ivrTask1.getTaskName());
+                        serviceOutPath.setCreateTime(new Date());
+                        iServiceOutPathService.insertServiceOutPath(serviceOutPath);
+                        String format = String.format("%03X", serviceOutPath.getId());
+                        serviceOutPath.setRadix(format);
+                        serviceOutPath.setUpdateTime(new Date());
+                        iServiceOutPathService.updateServiceOutPath(serviceOutPath);
+                        url = ip + ":" + req_path + "/xj?p=" + format;
                     }
-                    if (CollectionUtils.isEmpty(lssubIds)) {
-                        //濡傛灉鈥滀复鏃跺瓙浠诲姟鈥濅负绌猴紝璇存槑鍏ㄥ彂閫佸畬浜�
-                        isSend = true;
+                    if (StringUtils.isEmpty(patArchive.getPatidHis())) {
+                        serviceSubtask.setCurrentPreachform(sendPreachform);
+                        serviceSubtask.setVisitTime(getNextVisitTime(serviceSubtask.getId(), serviceSubtask.getTaskid(), serviceSubtask.getVisitTime(), serviceSubtask.getCurrentPreachform()));
+                        serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
+                        //澶辫触璁板綍
+                        setFailPreachForm(serviceSubtask, sendPreachform, "鍏紬鍙峰彂閫佸け璐�,his绯荤粺鐨勬偅鑰卛d涓虹┖", "5");
+                        continue;
                     }
-                    //灏嗗瓙浠诲姟ID娓呯┖锛屽皢鈥滀复鏃跺瓙浠诲姟鈥濇暟鎹� 鏀惧埌 鈥滃瓙浠诲姟鈥� 涓�
-                    subIds.clear();
-                    subIds.addAll(lssubIds);
-                    lssubIds.clear();
-                } else if (descByCode.equals("鍏紬鍙�")) {
-                    //鍏紬鍙�
-                    RSAPublicKeyExample rsaPublicKeyExample = new RSAPublicKeyExample();
-                    String taskId = rsaPublicKeyExample.encryptedData(ivrTask1.getTaskid().toString(), pub_key);
-                    for (ServiceSubtask serviceSubtask : selectServiceSubtaskList) {
-                        String patid = rsaPublicKeyExample.encryptedData(serviceSubtask.getPatid().toString(), pub_key);
-                        try {
-                            SendMagParam sendMagParam = new SendMagParam();
-                            sendMagParam.setType("5");
-                            String url = null;
-                            Boolean aBoolean = false;
-                            if (type == 1) {
-                                //闅忚
-                                ServiceOutPath serviceOutPath = new ServiceOutPath();
-                                serviceOutPath.setParam1(taskId);
-                                serviceOutPath.setParam2(patid);
-                                serviceOutPath.setCreateTime(new Date());
-                                iServiceOutPathService.insertServiceOutPath(serviceOutPath);
-                                String format = String.format("%03X", serviceOutPath.getId());
-                                serviceOutPath.setRadix(format);
-                                serviceOutPath.setUpdateTime(new Date());
-                                iServiceOutPathService.updateServiceOutPath(serviceOutPath);
-                                url = ip + ":" + req_path + "/sf?p=" + format;
-                            } else if (type == 2) {
-                                //闂埜
-                                ServiceOutPath serviceOutPath = new ServiceOutPath();
-                                serviceOutPath.setParam1(taskId);
-                                serviceOutPath.setParam2(patid);
-//                                serviceOutPath.setParam3(URLEncoder.encode(ivrTask1.getTaskName(), StandardCharsets.UTF_8.toString()));
-                                serviceOutPath.setParam3(ivrTask1.getTaskName());
-                                serviceOutPath.setCreateTime(new Date());
-                                iServiceOutPathService.insertServiceOutPath(serviceOutPath);
-                                String format = String.format("%03X", serviceOutPath.getId());
-                                serviceOutPath.setRadix(format);
-                                serviceOutPath.setUpdateTime(new Date());
-                                iServiceOutPathService.updateServiceOutPath(serviceOutPath);
-                                url = ip + ":" + req_path + "/wt?p=" + format;
-                            } else if (type == 3) {
-                                //瀹f暀
-                                ServiceOutPath serviceOutPath = new ServiceOutPath();
-                                serviceOutPath.setParam1(taskId);
-                                serviceOutPath.setParam2(patid);
-                                serviceOutPath.setParam3(ivrTask1.getTaskName());
-                                serviceOutPath.setCreateTime(new Date());
-                                iServiceOutPathService.insertServiceOutPath(serviceOutPath);
-                                String format = String.format("%03X", serviceOutPath.getId());
-                                serviceOutPath.setRadix(format);
-                                serviceOutPath.setUpdateTime(new Date());
-                                iServiceOutPathService.updateServiceOutPath(serviceOutPath);
-                                url = ip + ":" + req_path + "/xj?p=" + format;
-                            }
-                            PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(serviceSubtask.getPatid());
-                            if (StringUtils.isEmpty(patArchive.getPatidHis())) {
-                                ServiceSubtask ss = new ServiceSubtask();
-                                ss.setResult("error");
-                                ss.setRemark("鍏紬鍙峰彂閫佸け璐�,his绯荤粺鐨勬偅鑰卛d涓虹┖");
-                                ss.setSendstate(5L);
-                                ss.setId(serviceSubtask.getId());
-//                                ss.setFinishtime(new Date());
-                                serviceSubtaskMapper.updateServiceSubtask(ss);
-                                continue;
-                            }
 
-                            //鑾峰彇寰俊鍏紬鍙疯姹備俊鎭牴鎹満鏋処D
-                            log.error("鑾峰彇寰俊鍏紬鍙疯姹備俊鎭牴鎹満鏋処D锛歿}", patArchive.getOrgid());
-                            List<String> wxqqxx = WxGZHEnum.getDescByCode(patArchive.getOrgid());
-                            if (CollectionUtils.isEmpty(wxqqxx) || wxqqxx.size() < 4) {
-                                ServiceSubtask ss = new ServiceSubtask();
-                                ss.setResult("error");
-                                ss.setRemark("璇ユ満鏋勭殑鍏紬鍙烽厤缃俊鎭笉鍏紝鏃犳硶閫氳繃鍏紬鍙峰彂閫�");
-                                ss.setSendstate(5L);
-                                ss.setId(serviceSubtask.getId());
-//                                ss.setFinishtime(new Date());
-                                serviceSubtaskMapper.updateServiceSubtask(ss);
-                                continue;
-                            }
+                    //鑾峰彇寰俊鍏紬鍙疯姹備俊鎭牴鎹満鏋処D
+                    log.error("鑾峰彇寰俊鍏紬鍙疯姹備俊鎭牴鎹満鏋処D锛歿}", patArchive.getOrgid());
+                    List<String> wxqqxx = WxGZHEnum.getDescByCode(patArchive.getOrgid());
+                    if (CollectionUtils.isEmpty(wxqqxx) || wxqqxx.size() < 4) {
+                        serviceSubtask.setCurrentPreachform(sendPreachform);
+                        serviceSubtask.setVisitTime(getNextVisitTime(serviceSubtask.getId(), serviceSubtask.getTaskid(), serviceSubtask.getVisitTime(), serviceSubtask.getCurrentPreachform()));
+                        serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
+
+                        //澶辫触璁板綍
+                        setFailPreachForm(serviceSubtask, sendPreachform, "璇ユ満鏋勭殑鍏紬鍙烽厤缃俊鎭笉鍏紝鏃犳硶閫氳繃鍏紬鍙峰彂閫�", "5");
+                        continue;
+                    }
 
 
-                            String wxCode = getWXCode(serviceSubtask.getSfzh(), url, serviceSubtask.getTaskName(), serviceSubtask.getTaskName(), patArchive.getTelcode(), patArchive.getName(), patArchive.getPatidHis(), wxqqxx);
-                            log.error("wxCode鐨勫�间负:{}", wxCode);
-                            Map<String, Object> map = JSONObject.parseObject(wxCode, Map.class);
-                            log.error("map鐨勫�间负:{}", map);
-                            if (!map.isEmpty()) {
-                                serviceSubtask.setResult("success");
-                                serviceSubtask.setSendstate(3L);
-                                log.error("aBoolean鐨勫�间负:{}", aBoolean);
-                                if (map.get("succ").toString().equals("true")) {
-                                    aBoolean = true;
-                                }
-                                if (aBoolean == false) {
-                                    ServiceSubtaskRecord serviceSubtaskRecord = new ServiceSubtaskRecord();
-                                    serviceSubtaskRecord.setTaskid(serviceSubtask.getTaskid().toString());
-                                    serviceSubtaskRecord.setSubtaskId(serviceSubtask.getId());
-                                    serviceSubtaskRecord.setUuid(UUID.randomUUID().toString());
-                                    serviceSubtaskRecord.setTasktype(serviceSubtask.getType());
-                                    serviceSubtaskRecord.setPreachform("5");
-                                    serviceSubtaskRecord.setStartTime(System.currentTimeMillis());
-                                    serviceSubtaskRecord.setRemark(ObjectUtils.isNotEmpty(map.get("msg")) ? map.get("msg").toString() : null);
-                                    lssubIds.add(serviceSubtask.getId());
-                                    serviceSubtaskRecordService.insertServiceSubtaskRecord(serviceSubtaskRecord);
-                                    continue;
-                                }
-                            }
-                        } catch (Exception e) {
+                    String wxCode = getWXCode(serviceSubtask.getSfzh(), url, serviceSubtask.getTaskName(), serviceSubtask.getTaskName(), patArchive.getTelcode(), patArchive.getName(), patArchive.getPatidHis(), wxqqxx);
+                    log.error("wxCode鐨勫�间负:{}", wxCode);
+                    Map<String, Object> map = JSONObject.parseObject(wxCode, Map.class);
+                    log.error("map鐨勫�间负:{}", map);
+                    if (!map.isEmpty()) {
+                        serviceSubtask.setResult("success");
+                        serviceSubtask.setSendstate(3L);
+                        log.error("aBoolean鐨勫�间负:{}", aBoolean);
+                        if (map.get("succ").toString().equals("true")) {
+                            aBoolean = true;
+                        }
+                        if (aBoolean == false) {
                             ServiceSubtaskRecord serviceSubtaskRecord = new ServiceSubtaskRecord();
                             serviceSubtaskRecord.setTaskid(serviceSubtask.getTaskid().toString());
                             serviceSubtaskRecord.setSubtaskId(serviceSubtask.getId());
                             serviceSubtaskRecord.setUuid(UUID.randomUUID().toString());
                             serviceSubtaskRecord.setTasktype(serviceSubtask.getType());
                             serviceSubtaskRecord.setPreachform("5");
-                            serviceSubtaskRecord.setResult("fail");
                             serviceSubtaskRecord.setStartTime(System.currentTimeMillis());
-                            serviceSubtaskRecord.setRemark("鍏紬鍙峰彂閫佸け璐�");
-                            log.error("鍏紬鍙峰彂閫佸け璐ワ細{}", e.getMessage());
-                            lssubIds.add(serviceSubtask.getId());
+                            serviceSubtaskRecord.setRemark(ObjectUtils.isNotEmpty(map.get("msg")) ? map.get("msg").toString() : null);
                             serviceSubtaskRecordService.insertServiceSubtaskRecord(serviceSubtaskRecord);
+                            //鍦ㄥ瓙浠诲姟琛ㄩ噷璁板綍涓�涓�
+                            setFailPreachForm(serviceSubtask, sendPreachform, "鍏紬鍙峰彂閫佸け璐�", "5");
                             continue;
                         }
-                        //鍦ㄥ瓙浠诲姟琛ㄩ噷璁板綍涓�涓�
-                        String uuid = UUID.randomUUID().toString();
-                        serviceSubtask.setResult("success");
-                        serviceSubtask.setRemark("鍏紬鍙峰彂閫佹垚鍔�");
-                        serviceSubtask.setGuid(uuid);
-                        serviceSubtask.setSendstate(3L);
-                        serviceSubtask.setFinishtime(new Date());
-                        serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
-
-                        //浠诲姟鍙戦�佽褰�
-                        ServiceSubtaskRecord serviceSubtaskRecord = new ServiceSubtaskRecord();
-                        serviceSubtaskRecord.setTaskid(serviceSubtask.getTaskid().toString());
-                        serviceSubtaskRecord.setUuid(uuid);
-                        serviceSubtaskRecord.setTasktype(serviceSubtask.getType());
-                        serviceSubtaskRecord.setPreachform("5");
-                        serviceSubtaskRecord.setStartTime(System.currentTimeMillis());
-                        serviceSubtaskRecord.setResult("success");
-                        serviceSubtaskRecord.setRemark("鍏紬鍙峰彂閫佹垚鍔�");
-                        serviceSubtaskRecordService.insertServiceSubtaskRecord(serviceSubtaskRecord);
                     }
-                    if (CollectionUtils.isEmpty(lssubIds)) {
-                        //濡傛灉鈥滀复鏃跺瓙浠诲姟鈥濅负绌猴紝璇存槑鍏ㄥ彂閫佸畬浜�
-                        isSend = true;
-                    }
-                    //灏嗗瓙浠诲姟ID娓呯┖锛屽皢鈥滀复鏃跺瓙浠诲姟鈥濇暟鎹� 鏀惧埌 鈥滃瓙浠诲姟鈥� 涓�
-                    subIds.clear();
-                    subIds.addAll(lssubIds);
-                    lssubIds.clear();
+                } catch (Exception e) {
+                    ServiceSubtaskRecord serviceSubtaskRecord = new ServiceSubtaskRecord();
+                    serviceSubtaskRecord.setTaskid(serviceSubtask.getTaskid().toString());
+                    serviceSubtaskRecord.setSubtaskId(serviceSubtask.getId());
+                    serviceSubtaskRecord.setUuid(UUID.randomUUID().toString());
+                    serviceSubtaskRecord.setTasktype(serviceSubtask.getType());
+                    serviceSubtaskRecord.setPreachform("5");
+                    serviceSubtaskRecord.setResult("fail");
+                    serviceSubtaskRecord.setStartTime(System.currentTimeMillis());
+                    serviceSubtaskRecord.setRemark("鍏紬鍙峰彂閫佸け璐�");
+                    log.error("鍏紬鍙峰彂閫佸け璐ワ細{}", e.getMessage());
+                    serviceSubtaskRecordService.insertServiceSubtaskRecord(serviceSubtaskRecord);
+                    //澶辫触璁板綍
+                    setFailPreachForm(serviceSubtask, sendPreachform, "鍏紬鍙峰彂閫佸け璐�", "5");
+                    continue;
                 }
-                //閫氱煡 MQ 娑堟伅宸茶鎺ユ敹,鍙互ACK(浠庨槦鍒椾腑鍒犻櫎)浜�   锛堣繖涓渶瑕佹牴鎹笟鍔″啀鍘诲鐞咥CK锛�
+                //鍦ㄥ瓙浠诲姟琛ㄩ噷璁板綍涓�涓�
+                setFailPreachForm(serviceSubtask, sendPreachform, "鍏紬鍙峰彂閫佹垚鍔�", "2");
+                //浠诲姟鍙戦�佽褰�
+                ServiceSubtaskRecord serviceSubtaskRecord = new ServiceSubtaskRecord();
+                serviceSubtaskRecord.setTaskid(serviceSubtask.getTaskid().toString());
+                serviceSubtaskRecord.setUuid(UUID.randomUUID().toString());
+                serviceSubtaskRecord.setTasktype(serviceSubtask.getType());
+                serviceSubtaskRecord.setPreachform("5");
+                serviceSubtaskRecord.setStartTime(System.currentTimeMillis());
+                serviceSubtaskRecord.setResult("success");
+                serviceSubtaskRecord.setRemark("鍏紬鍙峰彂閫佹垚鍔�");
+                serviceSubtaskRecordService.insertServiceSubtaskRecord(serviceSubtaskRecord);
+
+            } else if (descByCode.equals("浜哄伐")) {
+                setFailPreachForm(serviceSubtask, sendPreachform, "浜哄伐寰呮墽琛�", "2");
             }
-            if (CollectionUtils.isNotEmpty(subIds)) {
-                //濡傛灉鍏ㄩ儴鐨勫彂閫佹柟寮忛兘鍙戝畬浜嗭紝杩樻湁鏄湭鍙戦�佺殑,闇�瑕佸幓subTask琛ㄤ腑锛岃褰曚竴涓嬶紝鍙戦�佸け璐�
-                for (Long id : subIds) {
-                    ServiceSubtask serviceSubtask = new ServiceSubtask();
-                    serviceSubtask.setResult("error");
-                    serviceSubtask.setRemark("鍙戦�佸け璐�");
+        }
+
+    }
+
+    private Date getNextVisitTime(Long subid, Long taskid, Date visitTime, String currentPreachform) {
+        ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform();
+        serviceSubtaskPreachform.setSubid(subid);
+        serviceSubtaskPreachform.setTaskid(taskid);
+        List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
+
+        if (CollectionUtils.isNotEmpty(serviceSubtaskPreachforms)) {
+            Optional<String> ct = serviceSubtaskPreachforms.stream().filter(item -> currentPreachform.equals(item.getPreachform())).map(ServiceSubtaskPreachform::getCompensateTime).findFirst();
+            String compensateTime = "0";
+            if (ct.isPresent()) compensateTime = ct.get();
+            int hoursToAdd = Integer.valueOf(compensateTime) * 24;
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTime(visitTime);
+            calendar.add(Calendar.HOUR_OF_DAY, hoursToAdd);
+            Date newDate = calendar.getTime();
+            return newDate;
+        }
+        return visitTime;
+    }
+
+    private String getSendPreachform(ServiceSubtaskPreachform serviceSubtaskPreachform, ServiceSubtask serviceSubtask) {
+        List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
+
+        // 鎯呭喌1锛歝urrentPreachform涓虹┖锛屽彇sort涓�1鐨刾reachform
+        if (StringUtils.isEmpty(serviceSubtask.getCurrentPreachform())) {
+            return serviceSubtaskPreachforms.stream().filter(item -> item.getSort() == 1L).map(ServiceSubtaskPreachform::getPreachform).findFirst().orElse(null);
+        }
+
+        // 鎯呭喌2锛歝urrentPreachform涓嶄负绌猴紝鎵句笅涓�涓猻ort
+        Optional<Long> currentSort = serviceSubtaskPreachforms.stream().filter(item -> serviceSubtask.getCurrentPreachform().equals(item.getPreachform())).map(ServiceSubtaskPreachform::getSort).findFirst();
+
+        if (currentSort.isPresent()) {
+            // 妫�鏌ユ槸鍚︽墍鏈塻endstate涓嶇瓑浜�9
+            boolean allSendStateNot1AndNot9 = serviceSubtaskPreachforms.stream().allMatch(item -> !item.getSendstate().equals("9"));
+
+            // 褰搒ort绛変簬鍒楄〃size鏃讹紝骞朵笖鎵�鏈塻endstate閮戒笉绛変簬9锛屽垯杩斿洖-1
+            if (currentSort.get().equals((long) serviceSubtaskPreachforms.size())) {
+                if (allSendStateNot1AndNot9) {
+                    //璇存槑鍏ㄥ彂閫佸け璐ヤ簡
                     serviceSubtask.setSendstate(5L);
-                    serviceSubtask.setId(id);
-//                    serviceSubtask.setFinishtime(new Date());
                     serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
                 }
+                return "-1";
             }
+
+            // 褰搒ort绛変簬鍒楄〃size鏃讹紝涓嬩竴涓猻ort涓�-1
+            Long nextSort = currentSort.get() + 1;
+
+            // 鎵惧埌涓嬩竴涓猻ort瀵瑰簲鐨刾reachform
+            return serviceSubtaskPreachforms.stream().filter(item -> nextSort.equals(item.getSort())).map(ServiceSubtaskPreachform::getPreachform).findFirst().orElse(null);
         }
 
+        return null;
     }
 
-    //    /**
-//     * 鏈哄櫒浜虹涓�鍙ヨ瘽璇煶
-//     * concurrency = "50"  骞跺彂鏁颁负50
-//     */
-//    @RabbitListener(queues = "ob_queue", concurrency = "50")
-//    public void obVisit(String content, Message message, Channel channel) throws IOException {
-//        try {
-//            IvrTaskcallPhoneMQ commonTaskcallMQ = null;
-//            ObjectMapper mapper = new ObjectMapper();
-//            commonTaskcallMQ = mapper.readValue(content, IvrTaskcallPhoneMQ.class);
-//            //鍒ゆ柇鎮h�呮槸鍚﹀凡缁忔帴鐢佃瘽
-//            String str = redisCache.getCacheObject(commonTaskcallMQ.getUuid() + "state_id");
-//            System.out.println("-----------------" + str);
-//            if (StringUtils.isNotEmpty(str) && str.equals("0")) {
-//                //鎮h�呭凡缁忔帴鍚簡鐢佃瘽
-//                new PhoneUtils().ttsPlayback(commonTaskcallMQ.getScript(), commonTaskcallMQ.getUuid());
-//            } else if (StringUtils.isNotEmpty(str) && str.equals("-10")) {
-//                //杩欎釜璇存槑,宸茬粡鎵撲簡鎸囧畾閬嶆暟杩樻槸娌℃湁浜烘帴锛屽彲浠ュ皢娑堟伅浠庨槦鍒椾腑绉婚櫎浜�
-//                channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
-//                return;
-//            } else {
-//                //杩涜闃熷垪灏鹃儴锛岃繘琛屼笅涓�娆℃牎楠�
-////                channel.basicRecover(false);
-//                channel.basicReject(message.getMessageProperties().getDeliveryTag(), true);
-//                System.out.println("++++++++++++++++++++++" + str);
-//                return;
-//            }
-//            //閫氱煡 MQ 娑堟伅宸茶鎺ユ敹,鍙互ACK(浠庨槦鍒椾腑鍒犻櫎)浜�   锛堣繖涓渶瑕佹牴鎹笟鍔″啀鍘诲鐞咥CK锛�
-//            channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
-//        } catch (Exception e) {
-//            log.error("============娑堣垂澶辫触,灏濊瘯娑堟伅琛ュ彂鍐嶆娑堣垂!==============");
-//            log.error(e.getMessage());
-//            channel.basicReject(message.getMessageProperties().getDeliveryTag(), true);
-//        }
-//    }
-    private String getKey() {
-        Map<String, String> map = new HashMap<>();
-        for (int i = 0; i < 6; i++) {
-            Boolean aBoolean = redisCache.hasKey("cache-" + i);
-            if (!aBoolean) {
-                redisCache.setCacheObject("cache-" + i, "");
-                map.put("cache-" + i, "");
-            } else {
-                map.put("cache-" + i, redisCache.getCacheObject("cache-" + i));
-            }
+
+    /**
+     * @param serviceSubtask
+     * @param preachform
+     * @param remark
+     * @param failSendstate
+     * @return
+     */
+    public Boolean setFailPreachForm(ServiceSubtask serviceSubtask, String preachform, String remark, String failSendstate) {
+        if (preachform.equals("-1")) {
+            //璇存槑閮戒笉闇�瑕佹墽琛屼簡
+            ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform();
+            serviceSubtaskPreachform.setSubid(serviceSubtask.getId());
+            serviceSubtaskPreachform.setTaskid(serviceSubtask.getTaskid());
+            serviceSubtaskPreachform.setOrgid(serviceSubtask.getOrgid());
+            serviceSubtaskPreachform.setSendstate(failSendstate);
+            serviceSubtaskPreachformMapper.updateSSPByCondition(serviceSubtaskPreachform);
+            return true;
         }
 
-        String key = null;
-        String value = "";
-        for (Map.Entry<String, String> entry : map.entrySet()) {
-            if (StringUtils.isEmpty(value)) {
-                value = entry.getValue();
-                key = entry.getKey();
-            } else {
-                if (entry.getValue().split(",").length < value.split(",").length) {
-                    value = entry.getValue();
-                    key = entry.getKey();
+        //灏嗙姸鎬佽缃负澶辫触
+        ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform();
+        serviceSubtaskPreachform.setSubid(serviceSubtask.getId());
+        serviceSubtaskPreachform.setTaskid(serviceSubtask.getTaskid());
+        serviceSubtaskPreachform.setOrgid(serviceSubtask.getOrgid());
+        //鑾峰彇璇ユ偅鑰呯殑鍙戦�佹柟寮忔�绘暟
+        List<ServiceSubtaskPreachform> spSize = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
+
+        serviceSubtaskPreachform.setPreachform(preachform);
+        //1:鏈彂閫佺姸鎬�
+        serviceSubtaskPreachform.setSendstate("1");
+        //鐢佃瘽鐨勬湭鍙戦�佺姸鎬侊紝闇�瑕佹煡2锛屽洜涓猴紝鏁版嵁鍙兘鍗″湪闃熷垪閲屼簡
+        if (preachform.equals("3")) serviceSubtaskPreachform.setSendstate("2");
+        List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
+        if (CollectionUtils.isNotEmpty(serviceSubtaskPreachforms)) {
+            ServiceSubtaskPreachform serviceSubtaskPreachform1 = serviceSubtaskPreachforms.get(0);
+            serviceSubtaskPreachform1.setSendstate(failSendstate);
+            serviceSubtaskPreachform1.setRemark(remark);
+            serviceSubtaskPreachformMapper.updateServiceSubtaskPreachform(serviceSubtaskPreachform1);
+            //濡傛灉褰撳墠鐨刾reachform宸茬粡鏄渶鍚庝竴涓簡,骞朵笖鏈杩樻槸鍙戦�佸け璐ワ紝閭g洿鎺ュ皢serviceSubtask鐨剆endstate鐘舵�佹敼鎴�5灏辫浜�(鍏ㄥけ璐ヤ簡)
+            if (serviceSubtaskPreachform1.getSort() == spSize.size()) {
+                if (serviceSubtaskPreachform1.getSort() == spSize.size()) {
+                    if (failSendstate.equals("4") || failSendstate.equals("5")) {
+                        serviceSubtask.setCurrentPreachform(preachform);
+                        serviceSubtask.setSendstate(5L);
+                        serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
+                        return true;
+                    }
                 }
             }
+        } else {
+            log.error("銆怣Q涓鎮h�呮病鏈夋煡璇㈠埌灞炰簬浠栫殑鍙戦�佹柟寮忥紝subid锛歿},prechform:{},orgid:{}銆�", serviceSubtask.getId(), preachform, serviceSubtask.getOrgid());
+            return false;
         }
-        return key;
+
+        serviceSubtask.setCurrentPreachform(preachform);
+        serviceSubtask.setVisitTime(getNextVisitTime(serviceSubtask.getId(), serviceSubtask.getTaskid(), serviceSubtask.getVisitTime(), serviceSubtask.getCurrentPreachform()));
+        serviceSubtask.setSendstate(3L);
+        serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
+        return true;
     }
 
+    private String getKey() {
+        String targetKey = null;
+        long minSize = Long.MAX_VALUE;
+
+        for (int i = 1; i < 6; i++) {
+            String key = "cache-" + i;
+
+            // 鑾峰彇 list 鐨勯暱搴︼紙鍗� value 鐨勫厓绱犱釜鏁帮級
+            Long size = redisCache.getListSize(key);
+            if (size == null) {
+                size = 0L; // 濡傛灉 key 涓嶅瓨鍦紝璁や负鏄� 0
+            }
+
+            // 鍙栨渶灏忓��
+            if (size < minSize) {
+                minSize = size;
+                targetKey = key;
+            }
+        }
+        return targetKey;
+    }
+
+//    private String getKey() {
+//        Map<String, List> map = new HashMap<>();
+//        for (int i = 0; i < 6; i++) {
+//            Boolean aBoolean = redisCache.hasKey("cache-" + i);
+//            if (!aBoolean) {
+//                redisCache.setCacheList("cache-" + i, new ArrayList<String>());
+//                map.put("cache-" + i, new ArrayList<String>());
+//            } else {
+//                map.put("cache-" + i, redisCache.getCacheObject("cache-" + i));
+//            }
+//        }
+//
+//        String key = null;
+//        List<String> value = new ArrayList<String>();
+//        for (Map.Entry<String, List> entry : map.entrySet()) {
+//            if (CollectionUtils.isEmpty(value)) {
+//                value = entry.getValue();
+//                key = entry.getKey();
+//            } else {
+//                value = entry.getValue();
+//                key = entry.getKey();
+//            }
+//        }
+//        return key;
+//    }
+
     private String getWXCode(String idcard, String url, String taskName, String taskDesc, String phone, String patientname, String setPatientid, List<String> wxqqxx) {
         XinHuaWXReq xinHuaWXReq = new XinHuaWXReq();
         xinHuaWXReq.setIdcard(idcard);
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java
index 7d34762..bc0e282 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java
@@ -10,6 +10,8 @@
 import com.ruoyi.common.utils.file.FileUploadUtils;
 import com.ruoyi.common.utils.file.FileUtils;
 import com.ruoyi.framework.config.ServerConfig;
+import com.ruoyi.system.domain.SysConfig;
+import com.ruoyi.system.mapper.SysConfigMapper;
 import com.smartor.domain.HtmlContentVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -53,6 +55,9 @@
 
     @Autowired
     private ServerConfig serverConfig;
+
+    @Autowired
+    private SysConfigMapper sysConfigMapper;
 
     private static final String FILE_DELIMETER = ",";
 
@@ -143,7 +148,10 @@
             convertDocToHtml(filePath + "\\" + file.getOriginalFilename(), filePath + "\\" + file.getOriginalFilename().split("\\.", 2)[0] + ".html");
 
             String url = null;
-            String xhPath = "http://218.108.11.22:8093/profile-api";
+            SysConfig config = new SysConfig();
+            config.setConfigKey("sys.qdip");
+            SysConfig sysConfig = sysConfigMapper.selectConfig(config);
+            String xhPath = sysConfig.getConfigValue() + "/profile-api";
             if (uploadSwitch == 1) {
                 String fn = fileName.replaceAll("\\.[^.]*$", ".html").replaceAll("/profile", "");
                 url = xhPath + fn;
@@ -263,8 +271,7 @@
         // 灏嗘枃浠朵繚瀛樺埌鎸囧畾鐩綍
         File outputFile = new File(RuoYiConfig.getUploadPath() + "/show/" + fileName.split("\\.", 2)[0] + "/" + fileName);
         try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outputFile), "UTF-8"))) {
-            if (StringUtils.isNotEmpty(htmlContentVO.getContent()))
-                writer.write(htmlContentVO.getContent());
+            if (StringUtils.isNotEmpty(htmlContentVO.getContent())) writer.write(htmlContentVO.getContent());
         } catch (IOException e) {
             e.printStackTrace();
         }
@@ -315,4 +322,26 @@
     }
 
 
+    /**
+     * 鑾峰彇鏂囦欢鎵╁睍鍚�
+     */
+    private static String getFileExtension(String fileName) {
+        int lastDotIndex = fileName.lastIndexOf('.');
+        if (lastDotIndex > 0) {
+            return fileName.substring(lastDotIndex);
+        }
+        return "";
+    }
+
+    /**
+     * 妫�鏌ユ枃浠舵槸鍚︿负鏀寔鐨刉ord鏍煎紡
+     */
+    public static boolean isSupportedWordFormat(String filePath) {
+        if (filePath == null) return false;
+        String fileName = filePath.toLowerCase();
+        return fileName.endsWith(".doc") || fileName.endsWith(".docx");
+    }
 }
+
+
+
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/SmsController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/SmsController.java
index 57f6730..8c3a964 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/SmsController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/SmsController.java
@@ -9,7 +9,9 @@
 import com.ruoyi.framework.config.ServerConfig;
 import com.smartor.domain.HtmlContentVO;
 import com.smartor.domain.ServiceOutPath;
+import com.smartor.domain.ServiceTask;
 import com.smartor.domain.smsVO;
+import com.smartor.mapper.ServiceTaskMapper;
 import com.smartor.service.IServiceOutPathService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -50,6 +52,9 @@
     @Autowired
     private IServiceOutPathService iServiceOutPathService;
 
+    @Autowired
+    private ServiceTaskMapper serviceTaskMapper;
+
 
     /**
      * @param
@@ -58,9 +63,10 @@
     @ApiOperation("鐭俊鍙戦��")
     @PostMapping("/send")
     public AjaxResult send(@RequestBody smsVO vo) {
-        String sendMsg=smsUtils.sendSms(xhsmsPath,xhsmsAccount,xhsmsPwd,vo.getPhone(),vo.getContent());
+        String sendMsg = smsUtils.sendSms(xhsmsPath, xhsmsAccount, xhsmsPwd, vo.getPhone(), vo.getContent());
         return AjaxResult.success(sendMsg);
     }
+
     /**
      * @param
      * @return
@@ -83,13 +89,19 @@
         serviceOutPath.setRadix(format);
         serviceOutPath.setUpdateTime(new Date());
         iServiceOutPathService.updateServiceOutPath(serviceOutPath);
-        String url=ip + ":" + req_path + "/wt?p=" + format;
+        String url = ip + ":" + req_path + "/wt?p=" + format;
+        ServiceTask serviceTask = serviceTaskMapper.selectServiceTaskByTaskid(Long.valueOf(taskId));
+        //濡傛灉type鏄闊抽殢璁跨殑璇濓紙璇存槑琛ュ伩鍙戦�佹柟寮忎腑鏈夌數璇濋殢璁跨殑鏂瑰紡锛岃繖閲岀殑澶栭摼灏卞湴鍧�鍙兘鐢�/sf锛�
+        if (serviceTask.getType().equals("1")) {
+            url = ip + ":" + req_path + "/sf?p=" + format;
+        }
+
 
         //String url = = ip + ":" + req_path + "/outsideChainwt?param1=" + taskId + "&param2=" + patid + "&param3=" + URLEncoder.encode(vo.getTaskName(), StandardCharsets.UTF_8.toString()) + "&param5=false";
 
-        String content="鎮ㄥソ锛岄個璇锋偍濉啓鍑洪櫌璋冩煡琛紝璇风偣鍑�" + url + "濉啓銆傛劅璋㈡偍閰嶅悎锛�";
+        String content = "鎮ㄥソ锛岄個璇锋偍濉啓鍑洪櫌璋冩煡琛紝璇风偣鍑�" + url + "濉啓銆傛劅璋㈡偍閰嶅悎锛�";
 
-        String sendMsg=smsUtils.sendSms(xhsmsPath,xhsmsAccount,xhsmsPwd,vo.getPhone(),content);
+        String sendMsg = smsUtils.sendSms(xhsmsPath, xhsmsAccount, xhsmsPwd, vo.getPhone(), content);
         return AjaxResult.success(sendMsg);
     }
 }
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/BaseDictOperationController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/BaseDictOperationController.java
index 070221f..0d93202 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/BaseDictOperationController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/BaseDictOperationController.java
@@ -2,6 +2,8 @@
 
 import java.util.List;
 
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.domain.model.LoginUser;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 
@@ -47,6 +49,9 @@
     @PostMapping("/list")
     public TableDataInfo list(@RequestBody BaseDictOperation baseDictOperation) {
         startPage();
+        LoginUser loginUser = getLoginUser();
+        SysUser user = loginUser.getUser();
+        baseDictOperation.setOrgid(user.getOrgid());
         List<BaseDictOperation> list = baseDictOperationService.selectBaseDictOperationList(baseDictOperation);
         return getDataTable(list);
     }
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/PatArchiveController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/PatArchiveController.java
index 0400c33..83c71e8 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/PatArchiveController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/PatArchiveController.java
@@ -25,6 +25,7 @@
 
 import javax.servlet.http.HttpServletResponse;
 import java.util.List;
+import java.util.Map;
 import java.util.concurrent.Executor;
 import java.util.concurrent.Executors;
 
@@ -249,8 +250,9 @@
      */
     @ApiOperation("鑾峰彇鎮h�呬俊鎭�")
     @PostMapping("/getPatientInfoQC")
-    public TableDataInfo getPatientInfoQC(@RequestBody PatArchiveReq patArchiveReq) {
-        PageUtils.startPageByPost(patArchiveReq.getPageNum(), patArchiveReq.getPageSize());
+    public Map<String, Object> getPatientInfoQC(@RequestBody PatArchiveReq patArchiveReq) {
+        patArchiveReq.setPageNum(PageUtils.getOffset(patArchiveReq.getPageNum(), patArchiveReq.getPageSize()));
+
         LoginUser loginUser = getLoginUser();
         SysUser user = loginUser.getUser();
         patArchiveReq.setOrgid(user.getOrgid());
@@ -261,13 +263,18 @@
             patArchiveReq.setLeaveldeptcodes(null);
         }
         List<PatArchiveOthreInfo> patientInfo = patArchiveService.getPatientInfoQC(patArchiveReq);
-        long count = PageUtils.count(new ISelect() {
-            @Override
-            public void doSelect() {
-                patArchiveService.getPatientInfoQC(patArchiveReq);
-            }
-        });
-        return getDataTable2(count, patientInfo);
+
+        patArchiveReq.setPageSize(null);
+        patArchiveReq.setPageNum(null);
+        List<PatArchiveOthreInfo> patientInfoQC = patArchiveService.getPatientInfoQC(patArchiveReq);
+
+//        long count = PageUtils.count(new ISelect() {
+//            @Override
+//            public void doSelect() {
+//                patArchiveService.getPatientInfoQC(patArchiveReq);
+//            }
+//        });
+        return getDataTable3(patientInfoQC.size(), patientInfo);
     }
 
 }
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 37f88e7..e60751b 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
@@ -5,7 +5,6 @@
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.utils.DtoConversionUtils;
-import com.ruoyi.system.service.ISysConfigService;
 import com.smartor.domain.*;
 import com.smartor.service.IServiceExternalService;
 import com.smartor.service.IServiceSubtaskDetailService;
@@ -38,8 +37,6 @@
     private IServiceExternalService serviceExternalService;
     @Autowired
     private ISvyTaskSingleService svyTaskSingleService;
-    @Autowired
-    private ISysConfigService configService;
 
     /**
      * 閫氱敤鎺ュ彛
@@ -86,10 +83,6 @@
         log.info("------serviceQueryInfo鐨勫叆鍙備负锛歿}", serviceQueryInfo);
         Map map = null;
         try {
-            String url = configService.selectConfigByKey("token.360",serviceQueryInfo.getXiaoXiTou().getFaSongJGID());
-            serviceQueryInfo.setUrl(url);
-           String url360 = configService.selectConfigByKey("url.360",serviceQueryInfo.getXiaoXiTou().getFaSongJGID());
-            serviceQueryInfo.setUrl360(url360);
             map = svyTaskSingleService.query360PatInfo(serviceQueryInfo);
         } catch (Exception e) {
             e.printStackTrace();
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSLTDHealthcareRecordController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSLTDHealthcareRecordController.java
index 0c7d3f1..1e24d92 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSLTDHealthcareRecordController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSLTDHealthcareRecordController.java
@@ -2,6 +2,7 @@
 
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
+import com.smartor.domain.ServiceSLTDDeptReqVO;
 import com.smartor.domain.ServiceSLTDInhospReqVO;
 import com.smartor.domain.ServiceSLTDInhospResDTO;
 import com.smartor.service.IServiceSLTDHealthcareRecordService;
@@ -70,4 +71,24 @@
             return AjaxResult.error("鏌ヨ鍋ュ悍璁板綍澶辫触锛�" + e.getMessage());
         }
     }
+
+    /**
+     * 閲囬泦绉戝鐥呭尯淇℃伅
+     */
+    @ApiOperation("閲囬泦绉戝鐥呭尯淇℃伅")
+    @PostMapping("/queryDeptWardAreaInfoList")
+    public AjaxResult queryDeptWardAreaInfoList(@RequestBody ServiceSLTDDeptReqVO reqVO) {
+        try {
+            log.info("銆恞ueryHealthcareRecordList銆戞帴鏀跺埌鏌ヨ璇锋眰锛屽弬鏁帮細{}", reqVO);
+
+            Boolean b = serviceSLTDHealthcareRecordService.queryDeptWardAreaInfoList(reqVO);
+
+            log.info("銆恞ueryHospUserInfoList銆戞煡璇㈡垚鍔燂紝鏄惁鎴愬姛锛歿}", b);
+            return AjaxResult.success(b);
+
+        } catch (Exception e) {
+            log.error("銆恞ueryHospUserInfoList銆戞煡璇㈠紓甯革紝璇锋眰鍙傛暟锛歿}", reqVO, e);
+            return AjaxResult.error("鏌ヨ鍋ュ悍璁板綍澶辫触锛�" + e.getMessage());
+        }
+    }
 }
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskAnswerController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskAnswerController.java
index f88bb2a..fb65162 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskAnswerController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskAnswerController.java
@@ -6,6 +6,7 @@
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.RSAPublicKeyExample;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.smartor.domain.*;
 import com.smartor.service.IServiceSubtaskAnswerService;
@@ -14,6 +15,7 @@
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
@@ -33,6 +35,10 @@
 public class ServiceSubtaskAnswerController extends BaseController {
     @Autowired
     private IServiceSubtaskAnswerService serviceSubtaskAnswerService;
+
+
+    @Value("${pri_key}")
+    private String pri_key;
 
     /**
      * 鏌ヨ浠诲姟闂嵎闂閫夐」鍒楄〃
@@ -90,6 +96,7 @@
     @ApiOperation("淇敼浠诲姟闂嵎闂閫夐」")
     @PostMapping("/edit")
     public AjaxResult edit(@RequestBody ServiceSubtaskAnswer serviceSubtaskAnswer) {
+        log.info("銆恠aveQuestionCache-----edit銆戠殑鍏ュ弬涓猴細{}", serviceSubtaskAnswer);
         return toAjax(serviceSubtaskAnswerService.updateServiceSubtaskAnswer(serviceSubtaskAnswer));
     }
 
@@ -101,13 +108,14 @@
     @ApiOperation("鍒犻櫎浠诲姟闂嵎闂閫夐」")
     @DeleteMapping("/remove/{ids}")
     public AjaxResult remove(@PathVariable Long[] ids) {
+        log.info("銆恠aveQuestionCache-----remove銆戠殑鍏ュ弬涓猴細{}", ids);
         return toAjax(serviceSubtaskAnswerService.deleteServiceSubtaskAnswerByIds(ids));
     }
 
     @ApiOperation("鎮h�呴棶棰樼粨鏋滆褰�(澶栭摼)")
     @PostMapping("/saveQuestionAnswer")
     public AjaxResult saveQuestionAnswer(@RequestBody ServiceSubTaskAnswerReq serviceSubTaskAnswerReq) {
-        log.info("-----saveQuestionAnswer鏂规硶鐨勫叆鍙備负锛歿}", serviceSubTaskAnswerReq);
+        log.info("銆恠aveQuestionCache-----saveQuestionAnswer銆戠殑鍏ュ弬涓猴細{}", serviceSubTaskAnswerReq);
         return toAjax(serviceSubtaskAnswerService.saveQuestionAnswer(serviceSubTaskAnswerReq, 0L));
     }
 
@@ -115,6 +123,7 @@
     @ApiOperation("鎮h�呴棶棰樼粨鏋滆褰曠紦瀛�(灏忕▼搴忓閾�)")
     @PostMapping("/saveQuestionCacheXCH")
     public AjaxResult saveQuestionCacheXCH(@RequestBody ServiceSubTaskCacheReq serviceSubTaskCacheReq) {
+        log.info("銆恠aveQuestionCache-----saveQuestionCacheXCH銆戠殑鍏ュ弬涓猴細{}", serviceSubTaskCacheReq);
         return toAjax(serviceSubtaskAnswerService.saveQuestionCache(serviceSubTaskCacheReq, 1L));
     }
 
@@ -122,26 +131,28 @@
     @ApiOperation("鎮h�呴棶棰樼粨鏋滆褰�(灏忕▼鍏呭閾�)")
     @PostMapping("/saveQuestionAnswerXCH")
     public AjaxResult saveQuestionAnswerXCH(@RequestBody ServiceSubTaskAnswerReq serviceSubTaskAnswerReq) {
-        log.info("-------saveQuestionAnswerXCH鐨勫叆鍙傜殑鍊间负锛歿}", serviceSubTaskAnswerReq);
+        log.info("銆恠aveQuestionCache-----saveQuestionAnswerXCH銆戠殑鍏ュ弬涓猴細{}", serviceSubTaskAnswerReq);
         return toAjax(serviceSubtaskAnswerService.saveQuestionAnswer(serviceSubTaskAnswerReq, 1L));
     }
 
     @ApiOperation("鑾峰彇鎮h�呴棶棰樼粨鏋滆褰曠紦瀛�(灏忕▼搴忓閾�)")
     @PostMapping("/getQuestionCacheXCH")
     public AjaxResult getQuestionCacheXCH(@RequestBody ServiceSubTaskCacheReq serviceSubTaskCacheReq) {
+        log.info("銆恠aveQuestionCache-----getQuestionCacheXCH銆戠殑鍏ュ弬涓猴細{}", serviceSubTaskCacheReq);
         return AjaxResult.success(serviceSubtaskAnswerService.getQuestionCache(serviceSubTaskCacheReq, 1L));
     }
 
     @ApiOperation("鎮h�呴棶棰樼粨鏋滆褰曠紦瀛�(澶栭摼)")
     @PostMapping("/saveQuestionCache")
     public AjaxResult saveQuestionCache(@RequestBody ServiceSubTaskCacheReq serviceSubTaskCacheReq) {
-        log.info("serviceSubTaskCacheReq鐨勫叆鍙備负锛歿}", serviceSubTaskCacheReq);
+        log.info("銆恠aveQuestionCache-----saveQuestionCache銆戠殑鍏ュ弬涓猴細{}", serviceSubTaskCacheReq);
         return toAjax(serviceSubtaskAnswerService.saveQuestionCache(serviceSubTaskCacheReq, 0L));
     }
 
     @ApiOperation("鑾峰彇鎮h�呴棶棰樼粨鏋滆褰曠紦瀛�(澶栭摼)")
     @PostMapping("/getQuestionCache")
     public AjaxResult getQuestionCache(@RequestBody ServiceSubTaskCacheReq serviceSubTaskCacheReq) {
+        log.info("銆恠aveQuestionCache-----getQuestionCache銆戠殑鍏ュ弬涓猴細{}", serviceSubTaskCacheReq);
         return AjaxResult.success(serviceSubtaskAnswerService.getQuestionCache(serviceSubTaskCacheReq, 0L));
     }
 
@@ -149,7 +160,21 @@
     @ApiOperation("鍖荤敓鏌ヨ鎮h�呴棶棰樼粨鏋�(澶栭摼)")
     @PostMapping("/selectPatQuestionResult")
     public AjaxResult selectPatQuestionResult(@RequestBody ServiceSubTaskQueryReq serviceSubTaskQueryReq) {
+        log.info("銆恠aveQuestionCache-----selectPatQuestionResult銆戠殑鍏ュ弬涓猴細{}", serviceSubTaskQueryReq);
         return AjaxResult.success(serviceSubtaskAnswerService.selectPatQuestionResult(serviceSubTaskQueryReq));
     }
 
+
+    @ApiOperation("鎮h�呮弧鎰忓害缁撴灉璁板綍(澶栭摼)")
+    @PostMapping("/saveMYDQuestionAnswer")
+    public AjaxResult saveMYDQuestionAnswer(@RequestBody ServiceSubTaskMYDAnswerReq serviceSubTaskAnswerReq) {
+        log.info("銆恠aveQuestionCache-----saveMYDQuestionAnswer銆戠殑鍏ュ弬涓猴細{}", serviceSubTaskAnswerReq);
+        RSAPublicKeyExample rsaPublicKeyExample = new RSAPublicKeyExample();
+        String taskId = rsaPublicKeyExample.decryptedData(serviceSubTaskAnswerReq.getTaskId(), pri_key);
+        String serialnum = rsaPublicKeyExample.decryptedData(serviceSubTaskAnswerReq.getSerialnum(), pri_key);
+        serviceSubTaskAnswerReq.setTaskId(taskId);
+        serviceSubTaskAnswerReq.setSerialnum(serialnum);
+        return toAjax(serviceSubtaskAnswerService.saveMYDQuestionAnswer(serviceSubTaskAnswerReq));
+    }
+
 }
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 751dd01..f3ebbfe 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
@@ -85,7 +85,6 @@
             }
         });
         return getDataTable2(total, list);
-//        return getDataTable(serviceSubtaskService.patItem(ivrTaskcall));
     }
 
 
@@ -111,8 +110,6 @@
             }
 
         }
-
-
         ExcelUtil<ServiceSubtaskExprot> util = new ExcelUtil<ServiceSubtaskExprot>(ServiceSubtaskExprot.class);
         util.exportExcel(response, serviceSubtaskExprots, "鎮h�呴殢璁夸俊鎭〃鍗�");
     }
@@ -265,8 +262,6 @@
     @PostMapping("/phoneCallBackYQ")
     public PhoneCallBackYQVO phoneCallBackYQ(@RequestBody PhoneCallReqYQVO phoneCallReqYQVO) {
         log.info("鐢佃瘽ASR閫氳瘽鍥炶皟(闆ㄧ划) 锛焮}", phoneCallReqYQVO);
-//        SysUser user = getLoginUser().getUser();
-//        phoneCallReqYQVO.setOrgid(user.getOrgid());
         PhoneCallBackYQVO phoneCallBackYQVO = serviceSubtaskService.phoneCallBackYQ(phoneCallReqYQVO);
         return phoneCallBackYQVO;
     }
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskController.java
index 36c5479..7f2c848 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskController.java
@@ -25,6 +25,7 @@
 
 import javax.servlet.http.HttpServletResponse;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -232,4 +233,31 @@
         return success(serviceTaskService.getScriptInfoByCondition(tid, pid, true, serviceTaskScriptQues.getPatfrom()));
     }
 
+
+    /**
+     * 閫氳繃浠诲姟ID鍜屾偅鑰匢D鑾峰彇鍗曚釜浜虹殑棰樼洰淇℃伅
+     *
+     * @return
+     */
+    @ApiOperation("閫氳繃浠诲姟ID鍜岃瘖鐤楄褰曞彿鑾峰彇鍗曚釜浜虹殑棰樼洰淇℃伅")
+    @PostMapping("/getScriptByCondition")
+    public AjaxResult getScriptByCondition(@RequestBody ServiceTaskScriptQues serviceTaskScriptQues) {
+        RSAPublicKeyExample rsaPublicKeyExample = new RSAPublicKeyExample();
+        Long taskId = Long.valueOf(rsaPublicKeyExample.decryptedData(serviceTaskScriptQues.getParam1(), pri_key));
+        String zyserialnum = null;
+        String mzserialnum = null;
+        String tsserialnum = null;
+        if (StringUtils.isNotEmpty(serviceTaskScriptQues.getParam2()))
+            zyserialnum = rsaPublicKeyExample.decryptedData(serviceTaskScriptQues.getParam2(), pri_key);
+        if (StringUtils.isNotEmpty(serviceTaskScriptQues.getParam3()))
+            mzserialnum = rsaPublicKeyExample.decryptedData(serviceTaskScriptQues.getParam3(), pri_key);
+        if (StringUtils.isNotEmpty(serviceTaskScriptQues.getParam4()))
+            tsserialnum = rsaPublicKeyExample.decryptedData(serviceTaskScriptQues.getParam4(), pri_key);
+        Map<String, Object> scriptByCondition = serviceTaskService.getScriptByCondition(taskId, zyserialnum, mzserialnum, tsserialnum);
+        scriptByCondition.put("zy", serviceTaskScriptQues.getParam2());
+        scriptByCondition.put("mz", serviceTaskScriptQues.getParam3());
+        scriptByCondition.put("tid", serviceTaskScriptQues.getParam1());
+        return success(scriptByCondition);
+    }
+
 }
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 75fd88e..4aebae5 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
@@ -1,13 +1,11 @@
 package com.ruoyi.web.controller.system;
 
-import com.ruoyi.common.annotation.IpWhitelist;
 import com.ruoyi.common.constant.Constants;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.domain.entity.SysMenu;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.core.domain.entity.SysUserDept;
 import com.ruoyi.common.core.domain.model.LoginBody;
-import com.ruoyi.common.core.domain.model.LoginUser;
 import com.ruoyi.common.exception.base.BaseException;
 import com.ruoyi.common.utils.RSAPublicKeyExample;
 import com.ruoyi.common.utils.SecurityUtils;
@@ -18,6 +16,7 @@
 import com.ruoyi.system.service.ISysDeptService;
 import com.ruoyi.system.service.ISysMenuService;
 import com.smartor.mapper.SysUserDeptMapper;
+import com.smartor.service.impl.ServiceSLTDHealthcareRecordServiceImpl;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -27,7 +26,9 @@
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 /**
@@ -60,6 +61,14 @@
     @Value("${isEncryp}")
     private Integer isEncryp;
 
+
+    @Value("${sltd_pub_path}")
+    private String sltdPubPath;
+
+
+    @Value("${spring.profiles.active}")
+    private String active;
+
     @Autowired
     private SysUserDeptMapper sysUserDeptMapper;
 
@@ -81,31 +90,64 @@
     /**
      * 鍗曠偣鐧诲綍鏂规硶(闇�瑕侀厤缃甀P鐧藉悕鍗�)
      * 闇�瑕佸湪sys_config琛ㄧ殑sys.ip.whitelis涓紝鍔犲叆IP鎵嶈兘璁块棶璇ユ柟娉�
+     * <p>
+     * 鍙傛暟鍚屾椂涓虹┖锛屼笉缁欐煡璇㈡暟鎹�
+     * <p>
+     * 銆愬叆鍙傝鍒欍��
+     * 濡傛灉userName涓嶄负绌猴紝閭rgid涔熶笉鑳戒负绌�
+     * 濡傛灉涓婇潰涓や釜涓虹┖锛岄偅token涓嶈兘涓虹┖
      *
      * @return 缁撴灉
      */
-    @IpWhitelist
+//    @IpWhitelist
     @GetMapping("/SSOLogin")
-    public RedirectView SSOLogin(@RequestParam String userName, @RequestParam String orgid, @RequestParam(required = false) String deptId) {
+    public RedirectView SSOLogin(@RequestParam(required = false) String userName, @RequestParam(required = false) String orgid, @RequestParam(required = false) String deptId, @RequestParam(required = false) String token) {
+        if (StringUtils.isEmpty(userName) && StringUtils.isEmpty(token)) {
+            throw new BaseException("鍙傛暟涓嶈兘涓虹┖");
+        }
+        log.info("--------杩涙柟娉曚簡鍚�?{}", token);
+        // 閲嶅畾鍚戝湴鍧�瀵硅薄(閲嶅畾鍚戝湴鍧�
         RedirectView redirectView = new RedirectView();
+//        if (active.equals("sltd")) {
+//            Map<String, String> headers = buildRequestHeaders();
+//            Map<String, String> requestParams = new HashMap<>();
+//            requestParams.put("token", token);
+//            String reqData = HttpUtil.postFormRequest(sltdPubPath + "/checkSsoTokenId", requestParams, headers, null);
+//            log.info("銆�-----杩斿洖鐨勭粨鏋滀负銆戯細{}", reqData);
+//            if (StringUtils.isEmpty(reqData)) {
+//                throw new BaseException("token楠岃瘉澶辫触");
+//            }
+//
+//            Map<String, Object> map = JSONObject.parseObject(reqData, Map.class);
+//            if (ObjectUtils.isEmpty(map) || (Integer) map.get("code") != 200) {
+//                throw new BaseException("token楠岃瘉澶辫触");
+//            }
+//
+//            Map<String, Object> data = (Map<String, Object>) map.get("data");
+//            //鍛樺伐缂栫爜
+//            userName = (String) data.get("accountNo");
+//        }
+        log.info("銆�-----------userName鐨勫�间负锛歿}銆�", userName);
         // 鐢熸垚浠ょ墝
         if (StringUtils.isEmpty(userName) || StringUtils.isEmpty(orgid)) {
             throw new BaseException("鐢ㄦ埛鍚嶆垨缁勭粐鏈烘瀯鎴栭儴闂ㄤ笉鑳戒负绌�");
         }
-        if (isEncryp == 1) {
+        if (isEncryp != null && isEncryp == 1) {
             RSAPublicKeyExample rsaPublicKeyExample = new RSAPublicKeyExample();
             userName = rsaPublicKeyExample.decryptedData(userName, pri_key);
         }
-        String token = loginService.loginByUserName(userName + "&" + orgid + "&" + deptId);
-        if (StringUtils.isEmpty(token)) {
+
+        String token2 = loginService.loginByUserName(userName + "&" + orgid + "&" + deptId);
+        if (StringUtils.isEmpty(token2)) {
             throw new BaseException("鐧婚檰澶辫触");
         }
+
         String path = sysConfigService.selectConfigByKey("sys.qddz");
-        if(StringUtils.isEmpty(path)){
+        if (StringUtils.isEmpty(path)) {
             throw new BaseException("璇烽厤缃墠绔湴鍧�");
         }
-        log.info("鍗曠偣鐧婚檰閲嶅畾鍚戝湴鍧�涓猴細{}",path + "/loginSSO?token=" + token + "&orgid=" + orgid + "&orgname=''" + "&ZuHuID=''&deptCode=''");
-        redirectView.setUrl(path + "/loginSSO?token=" + token + "&orgid=" + orgid + "&orgname=null" + "&ZuHuID=null&deptCode=null");
+        log.info("鍗曠偣鐧婚檰閲嶅畾鍚戝湴鍧�涓猴細{}", path + "/loginSSO?token=" + token2 + "&orgid=" + orgid + "&orgname=''" + "&ZuHuID=''&deptCode=''");
+        redirectView.setUrl(path + "/loginSSO?token=" + token2 + "&orgid=" + orgid + "&orgname=null" + "&ZuHuID=null&deptCode=null");
         redirectView.setStatusCode(HttpStatus.MOVED_PERMANENTLY);
         return redirectView;
     }
@@ -171,4 +213,12 @@
     public AjaxResult getDept(@PathVariable String orgid) {
         return AjaxResult.success(sysDeptService.selectDept(orgid));
     }
+
+
+    private Map<String, String> buildRequestHeaders() {
+        Map<String, String> headers = new HashMap<>();
+//        headers.put("Content-Type", "application/json");
+        headers.put("app-key", ServiceSLTDHealthcareRecordServiceImpl.APP_KEY);
+        return headers;
+    }
 }
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java
index c5070cb..a27d38d 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java
@@ -4,6 +4,7 @@
 import javax.servlet.http.HttpServletResponse;
 
 import com.ruoyi.common.core.domain.entity.SysUserRole;
+import com.ruoyi.common.utils.SecurityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.validation.annotation.Validated;
@@ -53,7 +54,7 @@
 
     @Autowired
     private ISysDeptService deptService;
-    
+
     @Value("${isAdmin}")
     private List<Long> isAdmin;
 
@@ -61,6 +62,8 @@
     @GetMapping("/list")
     public TableDataInfo list(SysRole role) {
         startPage();
+        SysUser user = SecurityUtils.getLoginUser().getUser();
+        role.setOrgid(user.getOrgid());
         List<SysRole> list = roleService.selectRoleList(role);
         return getDataTable(list);
     }
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 351c976..9979825 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
@@ -65,6 +65,9 @@
     @GetMapping("/list")
     public TableDataInfo list(SysUser user) {
         startPage();
+        LoginUser loginUser = getLoginUser();
+        String orgid = loginUser.getUser().getOrgid();
+        user.setOrgid(orgid);
         List<SysUser> list = userService.selectUserList(user);
         return getDataTable(list);
     }
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/test/MQTest.java b/ruoyi-admin/src/main/java/com/ruoyi/web/test/MQTest.java
index a523a63..4330ec2 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/test/MQTest.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/test/MQTest.java
@@ -65,7 +65,7 @@
     @Test
     public void cc() {
         RSAPublicKeyExample rsaPublicKeyExample = new RSAPublicKeyExample();
-        String s = rsaPublicKeyExample.encryptedData("1012320966", "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALQzqW1EIXBKGMu+2oEYSB5gM7Ox/ihyYTeeoE0yPX1qtt4++5yNOeTBVd6EEM4iKzVEzWj6REIWVwaSNPn/SvUCAwEAAQ==");
+        String s = rsaPublicKeyExample.encryptedData("20250815001094", "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALQzqW1EIXBKGMu+2oEYSB5gM7Ox/ihyYTeeoE0yPX1qtt4++5yNOeTBVd6EEM4iKzVEzWj6REIWVwaSNPn/SvUCAwEAAQ==");
         System.out.println("鍔犲瘑缁撴灉涓猴細" + s);
         String s1 = rsaPublicKeyExample.decryptedData(s, "MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEAtDOpbUQhcEoYy77agRhIHmAzs7H+KHJhN56gTTI9fWq23j77nI055MFV3oQQziIrNUTNaPpEQhZXBpI0+f9K9QIDAQABAkB3n0fcWfrcoMN/FU3VnrnZOEF6CzFNxkgU9P8y36QECWKZ9JhYQkNpKrMC9oXlN3VSaRigV7B+L/I/a0Rs1W+tAiEA4jx7xcXJ4y4BNwAmVHt6NNiEkzIwWnwC/0qsEu8NsOsCIQDL6MMn1D2uznC6OuOWpxDCkBh1JL1NzZTZeH2G+hj7nwIgKGAC9tjFnvWm4dn0/T7MIIJDpsFeP8fCAS2iZ/6hwuECIAS/eLvWr1EAsZNEh8QcQ8GkBU3E+ztyjAK8UX/xFt/VAiBf79/1tDErX4/DChecM8w3c3DhbBcjuE3fHZn7p6/UKg==");
         System.out.println("瑙e瘑缁撴灉涓猴細"+s1);
diff --git a/ruoyi-admin/src/main/resources/application-druid.yml b/ruoyi-admin/src/main/resources/application-druid.yml
index d149156..b31ef4f 100644
--- a/ruoyi-admin/src/main/resources/application-druid.yml
+++ b/ruoyi-admin/src/main/resources/application-druid.yml
@@ -29,15 +29,19 @@
         #        driverClassName: com.mysql.cj.jdbc.Driver
 
         #  鍏徃浜�
-#        url: jdbc:mysql://116.62.18.175:6002/smartor_xinhua?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
-#        username: hxsoft
-#        password: Hxerp2000
-#        driverClassName: com.mysql.cj.jdbc.Driver
+        #        url: jdbc:mysql://116.62.18.175:6002/smartor_lishui?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        #        username: hxsoft
+        #        password: Smartor.2023
+        #        driverClassName: com.mysql.cj.jdbc.Driver
         #  鍏徃鏈湴
         url: jdbc:mysql://haiershi.a1.luyouxia.net:23844/smartor_lishui?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         username: smartor
         password: Smartor.2023
         driverClassName: com.mysql.cj.jdbc.Driver
+      #        url: jdbc:mysql://127.0.0.1:2881/smartor-lisui?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+      #        username: root@sys
+      #        password:
+      #        driverClassName: com.mysql.cj.jdbc.Driver
 
       #        # 楂樻柉鏁版嵁搴撻厤缃�
       #        url: jdbc:postgresql://127.0.0.1:5432/smartorlishui
@@ -58,11 +62,11 @@
       #        password: Smartor.2023
       #        driverClassName: com.mysql.cj.jdbc.Driver
       # 浠庢暟鎹簮寮�鍏�/榛樿鍏抽棴(鍏徃)
-#       enabled: true
-#       url: jdbc:sqlserver://116.62.18.175:6001;DatabaseName=iv-ywey;encrypt=false;SelectMethod=cursor
-#       username: sa
-#       password: Hxerp2000
-#       driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
+      #       enabled: true
+      #       url: jdbc:sqlserver://116.62.18.175:6001;DatabaseName=iv-ywey;encrypt=false;SelectMethod=cursor
+      #       username: sa
+      #       password: Hxerp2000
+      #       driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
 
       # 浠庢暟鎹簮寮�鍏�/榛樿鍏抽棴(涔変箤浜岄櫌)
       # enabled: true
@@ -113,7 +117,7 @@
             multi-statement-allow: true
   # redis 閰嶇疆
   redis:
-    host: 192.168.100.10
+    host: 127.0.0.1
     port: 6020
     database: 0
     password: Smartor
@@ -140,6 +144,7 @@
   sql-column-case: camel
   show-sql: true #閰嶇疆鎵撳嵃SQL
   page-config:
+    enabled: false  #绂佺敤鍒嗛〉
     size: size
     page: page
     default-page: 1
@@ -202,9 +207,9 @@
 
 #鏂板崕鍖婚櫌澶栭摼璇锋眰IP鍜岀鍙e彿
 req_path: 8093
-#localIP: https://wx.lihusmart.com
+localIP: https://wx.lihusmart.com
 #涓芥按澶栭摼璇锋眰IP鍜岀鍙e彿
-localIP: http://221.12.19.26
+#localIP: http://221.12.19.26
 
 #鑾峰彇鎮h�呬俊鎭疷RL(鍗庡崜鎻愪緵)
 hosp_info_url: http://esb-core-rest.wowjoy.cn/esb/exchange
@@ -213,9 +218,9 @@
 uploadSwitch: 0
 
 #  鎸囧畾asr鍥炶皟鐨剈rl璺緞(鏈湴)
-ASRCallBackPath: http://192.168.100.10:8095/smartor/serviceSubtask/phoneCallBackYQ
+ASRCallBackPath: http://192.168.100.127:8095/smartor/serviceSubtask/phoneCallBackYQ
 #鎸傛柇IP(鏈湴)
-hangup: http://192.168.100.6:8089/hangup
+hangup: http://192.168.100.33:5060/hangup
 #fs鎵�浣跨敤鐨勯樋閲岀殑app_key(鏈湴)
 app_key_yq: ZurNHpaQLq6P55YS
 
@@ -267,6 +272,11 @@
 isAdmin: 1,2,3,4,5,6,7,8,9,10,11,12,13
 
 #闅忚鍖婚櫌锛�1鏂板崕   2涓芥按
-visitHosp: 2
+visitHosp: 1
 
-isEncryp:
\ No newline at end of file
+isEncryp:
+
+dealDeptCode:
+
+# 鍓嶇ip
+qdip: 192.168.100.132
diff --git a/ruoyi-admin/src/main/resources/application-sltd.yml b/ruoyi-admin/src/main/resources/application-sltd.yml
index b35c05f..d852979 100644
--- a/ruoyi-admin/src/main/resources/application-sltd.yml
+++ b/ruoyi-admin/src/main/resources/application-sltd.yml
@@ -231,8 +231,8 @@
 #admin绠$悊鍛榰serId
 isAdmin: 1,2,3,4,5,6,7,8,9,10,11,12,13
 
-#闅忚鍖婚櫌锛�1鏂板崕   2涓芥按    3鐪佺珛鍚屽痉
-visitHosp: 3
+#闅忚鍖婚櫌锛�1鏂板崕   2涓芥按   3甯備竴   4鐪佺珛鍚屽痉
+visitHosp: 4
 
 #鐢ㄦ埛榛樿瀵嗙爜
 userPwd: sltd@0230
@@ -244,3 +244,4 @@
 #鏄惁鍔犲瘑  0涓嶅姞   1鍔犲瘑
 isEncryp: 0
 
+
diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
index 24f1d1f..7c0275b 100644
--- a/ruoyi-admin/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -74,7 +74,7 @@
     # 鍥介檯鍖栬祫婧愭枃浠惰矾寰�
     basename: i18n/messages
   profiles:
-    active: hzszlyy
+    active: druid
   # 鏂囦欢涓婁紶
   servlet:
     multipart:
@@ -137,6 +137,10 @@
     redirect_uri: "http://172.20.111.142:8096/login"
   state: "smartor"  # 浣犱滑绯荤粺鏍囪瘑
   scope: "openid%20roles%20profile"
+  #鍗曠偣鐧婚檰鐧藉悕鍗旾P閰嶇疆
+  whitelist:
+    ips:
+
 
 # 闃叉XSS鏀诲嚮
 xss:
diff --git a/ruoyi-admin/src/main/resources/mybatis/mybatis-config.xml b/ruoyi-admin/src/main/resources/mybatis/mybatis-config.xml
index 65f42ed..62daf6f 100644
--- a/ruoyi-admin/src/main/resources/mybatis/mybatis-config.xml
+++ b/ruoyi-admin/src/main/resources/mybatis/mybatis-config.xml
@@ -12,7 +12,7 @@
         <!-- 閰嶇疆榛樿鐨勬墽琛屽櫒.SIMPLE灏辨槸鏅�氭墽琛屽櫒;REUSE鎵ц鍣ㄤ細閲嶇敤棰勫鐞嗚鍙�(prepared statements);BATCH鎵ц鍣ㄥ皢閲嶇敤璇彞骞舵墽琛屾壒閲忔洿鏂� -->
         <setting name="defaultExecutorType" value="SIMPLE"/>
         <!-- 鎸囧畾 MyBatis 鎵�鐢ㄦ棩蹇楃殑鍏蜂綋瀹炵幇 -->
-<!--        <setting name="logImpl" value="STDOUT_LOGGING"/>-->
+        <setting name="logImpl" value="STDOUT_LOGGING"/>
         <!-- 浣跨敤椹煎嘲鍛藉悕娉曡浆鎹㈠瓧娈� -->
         <!-- <setting name="mapUnderscoreToCamelCase" value="true"/> -->
     </settings>
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java
index 25bdd98..9a82487 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java
@@ -3,6 +3,8 @@
 import java.beans.PropertyEditorSupport;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -94,6 +96,14 @@
         rspData.setTotal(total);
         return rspData;
     }
+    protected Map<String,Object> getDataTable3(long total, List<?> list) {
+        Map<String,Object> rspData = new TreeMap<>();
+        rspData.put("code",HttpStatus.SUCCESS);
+        rspData.put("msg","鏌ヨ鎴愬姛");
+        rspData.put("rows",list);
+        rspData.put("total",total);
+        return rspData;
+    }
 
     /**
      * 杩斿洖鎴愬姛
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java
index 8955e98..79785fd 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java
@@ -30,6 +30,10 @@
         redisTemplate.opsForValue().set(key, value);
     }
 
+    public <T> void setCacheList(final String key, final List<T> values) {
+        redisTemplate.opsForList().rightPushAll(key, values);
+    }
+
     /**
      * 缂撳瓨鍩烘湰鐨勫璞★紝Integer銆丼tring銆佸疄浣撶被绛�
      *
@@ -299,4 +303,13 @@
     public Collection<String> keys(final String pattern) {
         return redisTemplate.keys(pattern);
     }
+
+    /**
+     * 鑾峰彇褰撳墠key鍊肩殑鏁伴噺
+     * @param key
+     * @return
+     */
+    public Long getListSize(String key) {
+        return redisTemplate.opsForList().size(key);
+    }
 }
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/ServiceFromEnum.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/ServiceFromEnum.java
index dd8af6b..9a00ac6 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/enums/ServiceFromEnum.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/ServiceFromEnum.java
@@ -4,7 +4,7 @@
  * 鍙戦�佺被鍨嬫灇涓�
  */
 public enum ServiceFromEnum {
-    DMT(1, "澶氬獟浣�"),
+    RG(1, "浜哄伐"),
     ZZ(2, "绾歌川"),
     DH(3, "鐢佃瘽"),
     DX(4, "鐭俊"),
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/VisitSendStateEnum.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/VisitSendStateEnum.java
deleted file mode 100644
index 881efa2..0000000
--- a/ruoyi-common/src/main/java/com/ruoyi/common/enums/VisitSendStateEnum.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package com.ruoyi.common.enums;
-
-/**
- * 闅忚鑳藉惁鍙戦�侀暱鏈熶换鍔℃灇涓�
- */
-public enum VisitSendStateEnum {
-    zyy("47231022633110211A2101", "涓芥按涓尰闄�", true),
-    jn("47255004333112711A1001", "鏅畞", false);
-
-
-    private String code;
-    private String desc;
-    //闅忚鏍囧織
-    private Boolean visitFlag;
-
-    VisitSendStateEnum(String code, String desc, Boolean visitFlag) {
-        this.code = code;
-        this.desc = desc;
-        this.visitFlag = visitFlag;
-    }
-
-    public static Boolean getDescByCode(String code) {
-        VisitSendStateEnum[] organEnums = values();
-        for (int i = 0; i < organEnums.length; i++) {
-            VisitSendStateEnum organEnum = organEnums[i];
-            if (organEnum.getCode().equals(code)) {
-                return organEnum.getVisitFlag();
-            }
-        }
-        return null;
-    }
-
-
-    public Boolean getVisitFlag() {
-        return visitFlag;
-    }
-
-    public void setVisitFlag(Boolean visitFlag) {
-        this.visitFlag = visitFlag;
-    }
-
-    public String getCode() {
-        return code;
-    }
-
-    public void setCode(String code) {
-        this.code = code;
-    }
-
-    public String getDesc() {
-        return desc;
-    }
-
-    public void setDesc(String desc) {
-        this.desc = desc;
-    }
-}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/HttpUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/HttpUtil.java
index f0713bc..859672d 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/HttpUtil.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/HttpUtil.java
@@ -106,11 +106,23 @@
             httpMethod.setRequestEntity(entity);
 
             int resultCode = httpClient.executeMethod(httpMethod);
+            // 鑾峰彇鍝嶅簲澶寸殑瀛楃缂栫爜
+            String contentType = httpMethod.getResponseHeader("Content-Type") == null ?
+                    null : httpMethod.getResponseHeader("Content-Type").getValue();
+            String charset = "UTF-8"; // 榛樿浣跨敤UTF-8
+
+            if (contentType != null && contentType.contains("charset=")) {
+                String[] parts = contentType.split("charset=");
+                if (parts.length > 1) {
+                    charset = parts[1].split(";")[0].trim();
+                }
+            }
+
             InputStream inputStream = httpMethod.getResponseBodyAsStream();
             if (inputStream == null) {
                 throw new HttpRequestException(RESPONSE_NULL_ERROR_CODE, "鍝嶅簲涓簄ull");
             }
-            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
+            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream,charset));
             StringBuffer stringBuffer = new StringBuffer();
             String str = "";
             while ((str = reader.readLine()) != null) {
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/PageUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/PageUtils.java
index 2cec013..0140c8e 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/PageUtils.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/PageUtils.java
@@ -38,4 +38,14 @@
     public static void clearPage() {
         PageHelper.clearPage();
     }
+
+    /**
+     * 璁$畻鍋忕Щ閲�
+     */
+    public static Integer getOffset(Integer pageNum, Integer pageSize) {
+        if (pageNum == null) pageNum = 1;
+        if (pageSize == null) pageSize = 10;
+        return (pageNum - 1) * pageSize;
+
+    }
 }
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
index ea1a17b..51eafa9 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
@@ -109,9 +109,8 @@
                 .authorizeRequests()
                 // 瀵逛簬鐧诲綍login 娉ㄥ唽register 楠岃瘉鐮乧aptchaImage 鍏佽鍖垮悕璁块棶
                 .antMatchers("/login", "/register", "/captchaImage", "/qrcode/generateStaticHtml", "/qrcode/getQRcode", "/qrcode/getFormDate", "/chat", "/system/file/admin/uploadFile", "/smartor/dingtalk/sendNotification", "/patient/read/patientInfo", "/socket", "/API_ESB_Service", "/API_ESB_Service/Run", "/magic/web/**", "/smartor/serviceSubtask/phoneCallBack", "/smartor/serviceSubtask/taskPull", "/smartor/serviceSubtask/phoneCallBackYQ", "/smartor/robot/callstatus", "/smartor/robot/aidialog", "/smartor/robot/cdrinfo", "/getToken", "/smartor/subtaskAnswer/getQuestionCache", "/smartor/subtaskAnswer/saveQuestionCache", "/smartor/servicetask/getScriptInfoByCondition", "/smartor/subtaskAnswer/saveQuestionAnswer", "/smartor/import/download", "/smartor/serviceSubtask/recordAccept", "/smartor/outPath/getInfoByParam", "/smartor/serviceExternal/addDeptInfo", "/smartor/serviceExternal/**", "/sso/**","/smartor/sltdHealthcareRecord/**","/smartor/servicetask/getScriptByCondition","/smartor/subtaskAnswer/saveMYDQuestionAnswer").permitAll()
-                .antMatchers(HttpMethod.GET, "/SSOLogin/**").permitAll()
                 // 闈欐�佽祫婧愶紝鍙尶鍚嶈闂�
-                .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**","/getDept/*").permitAll().antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
+                .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**","/getDept/*","/SSOLogin/**").permitAll().antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
                 .antMatchers("/smartor/organization/list").permitAll()
                 // 闄や笂闈㈠鐨勬墍鏈夎姹傚叏閮ㄩ渶瑕侀壌鏉冭璇�
                 .anyRequest().authenticated().and().headers().frameOptions().disable();
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/HospitalFilterInterceptor.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/HospitalFilterInterceptor.java
index 2bf520f..b5107b1 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/HospitalFilterInterceptor.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/HospitalFilterInterceptor.java
@@ -12,8 +12,6 @@
 import org.springframework.stereotype.Component;
 
 import java.sql.Connection;
-import java.util.ArrayList;
-import java.util.List;
 import java.util.Properties;
 
 import static com.ruoyi.common.utils.SecurityUtils.getLoginUser;
@@ -44,13 +42,6 @@
 
         // 鑾峰彇鍘熷 SQL
         String originalSql = (String) metaObject.getValue("delegate.boundSql.sql");
-        //娌冲崡鐨勭壒娈婅姹傦紝涓嶈orgid
-        if (active.equals("hn")) {
-            String s = removeOrgIdCondition(originalSql);
-            // 灏嗕慨鏀瑰悗鐨� SQL 鍐欏洖
-            metaObject.setValue("delegate.boundSql.sql", s);
-            return invocation.proceed();
-        }
 
         // 鑾峰彇褰撳墠 orgid
         String orgid = null;
@@ -62,7 +53,7 @@
         } catch (Exception e) {
 //            e.printStackTrace();
         }
-        if (StringUtils.isEmpty(orgid)) {
+        if (StringUtils.isEmpty(orgid) || active.equals("hn")) {
             return invocation.proceed();
         }
 
@@ -76,39 +67,6 @@
         return invocation.proceed();
     }
 
-    private String removeOrgIdCondition(String sql) {
-        // 杞崲涓哄皬鍐欎究浜庡尮閰嶏紝浣嗕繚鐣欏師濮嬪ぇ灏忓啓
-        String lowerSql = sql.toLowerCase();
-
-        // 鏌ユ壘 WHERE 瀛愬彞鐨勪綅缃�
-        int whereIndex = lowerSql.indexOf("where");
-        if (whereIndex == -1) {
-            return sql; // 娌℃湁 WHERE 瀛愬彞
-        }
-
-        // 鎻愬彇 WHERE 涔嬪悗鐨勯儴鍒�
-        String whereClause = sql.substring(whereIndex + 5);
-        String beforeWhere = sql.substring(0, whereIndex);
-
-        // 浣跨敤姝e垯琛ㄨ揪寮忓垎鍓叉潯浠�
-        String[] conditions = whereClause.split("(?i)\\s+(AND|OR)\\s+");
-
-        // 杩囨护鎺夊寘鍚� orgid 鐨勬潯浠�
-        List<String> filteredConditions = new ArrayList<>();
-        for (String condition : conditions) {
-            if (!containsOrgId(condition)) {
-                filteredConditions.add(condition.trim());
-            }
-        }
-
-        // 閲嶆柊鏋勫缓 SQL
-        if (filteredConditions.isEmpty()) {
-            return beforeWhere.trim();
-        } else {
-            String newWhereClause = String.join(" AND ", filteredConditions);
-            return beforeWhere + "WHERE " + newWhereClause;
-        }
-    }
 
     private boolean containsOrgId(String condition) {
         // 妫�鏌ユ潯浠舵槸鍚﹀寘鍚� orgid锛堣�冭檻鍒悕锛�
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
index 8cf951a..22ffcfc 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
@@ -96,6 +96,7 @@
 
     public String loginByUserName(String userName) {
         SysUser sysUser = userService.selectUserByUserNameAndDeptId(userName);
+        log.info("---------sysUser鐨勫�间负:{}", sysUser);
         if (ObjectUtils.isNotEmpty(sysUser)) {
             // 鏋勫缓鐧诲綍鐢ㄦ埛瀵硅薄
             LoginUser loginUser = new LoginUser();
diff --git a/ruoyi-quartz/pom.xml b/ruoyi-quartz/pom.xml
index 5fe52fd..76091b2 100644
--- a/ruoyi-quartz/pom.xml
+++ b/ruoyi-quartz/pom.xml
@@ -36,14 +36,14 @@
         </dependency>
         <dependency>
             <groupId>com.ruoyi</groupId>
-            <artifactId>smartor</artifactId>
-            <version>3.8.5</version>
+            <artifactId>ruoyi-system</artifactId>
         </dependency>
         <dependency>
             <groupId>com.ruoyi</groupId>
-            <artifactId>ruoyi-system</artifactId>
+            <artifactId>smartor</artifactId>
+            <version>3.8.5</version>
         </dependency>
 
     </dependencies>
 
-</project>
\ No newline at end of file
+</project>
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISServiceImpl.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISServiceImpl.java
index 7612fae..0ef55b5 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISServiceImpl.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISServiceImpl.java
@@ -85,6 +85,7 @@
 
     /**
      * 鍚屾浠诲姟
+     *
      * @param
      * @return
      */
@@ -104,15 +105,15 @@
             //鍚屾浣忛櫌鐥呬汉淇℃伅
             List<Map<String, Object>> syncTemp = syncList.stream().filter(row -> row.get("syncName").equals("pat_med_inhosp")).collect(Collectors.toList());
             if (syncTemp.size() > 0) {
-                count+=syncMedInhosp(syncTemp.get(0).get("startTime") + "", endTime);
-                utilsMapper.updateSql("update sys_sync_time set startTime='"+endTime+"' where syncName='pat_med_inhosp' ");
+                count += syncMedInhosp(syncTemp.get(0).get("startTime") + "", endTime);
+                utilsMapper.updateSql("update sys_sync_time set startTime='" + endTime + "' where syncName='pat_med_inhosp' ");
             }
 
             //鍚屾闂ㄨ瘖淇℃伅
             syncTemp = syncList.stream().filter(row -> row.get("syncName").equals("pat_med_outhosp")).collect(Collectors.toList());
             if (syncTemp.size() > 0) {
-                count+=syncOuthosp(syncTemp.get(0).get("startTime") + "", endTime);
-                utilsMapper.updateSql("update sys_sync_time set startTime='"+endTime+"' where syncName='pat_med_outhosp' ");
+                count += syncOuthosp(syncTemp.get(0).get("startTime") + "", endTime);
+                utilsMapper.updateSql("update sys_sync_time set startTime='" + endTime + "' where syncName='pat_med_outhosp' ");
             }
 
 
@@ -124,10 +125,11 @@
 
     /**
      * 鍚屾鎮h�呭熀鏈俊鎭�
+     *
      * @param
      * @return
      */
-    private  Integer syncArchive(String startTime,String endTime) {
+    private Integer syncArchive(String startTime, String endTime) {
         Integer count = 0;
         PatArchive pa = new PatArchive();
         pa.setLastStartTime(startTime);
@@ -148,8 +150,8 @@
                     count += patArchiveMapper.insertPatArchiveSingle(pm);
 
                 }
-            }catch (Exception ex){
-                log.info("鍙悓鎮h�呭熀鏈俊鎭�:"+ex.getMessage());
+            } catch (Exception ex) {
+                log.info("鍙悓鎮h�呭熀鏈俊鎭�:" + ex.getMessage());
             }
         }
 
@@ -158,10 +160,11 @@
 
     /**
      * 鍚屾鍑哄叆闄俊鎭�
+     *
      * @param
      * @return
      */
-    private  Integer syncMedInhosp(String startTime,String endTime) {
+    private Integer syncMedInhosp(String startTime, String endTime) {
         Integer count = 0;
         PatMedInhosp patMedInhosp = new PatMedInhosp();
         patMedInhosp.setLastStartTime(startTime);
@@ -169,11 +172,11 @@
         List<PatMedInhosp> patMedInhospList = chMapper.selectPatMedInhospList(patMedInhosp);
         log.info("鍙悓姝ュ嚭鍏ラ櫌鏁伴噺" + patMedInhospList.size());
         for (PatMedInhosp pm : patMedInhospList) {
-            List<PatArchive> patArchives1=new ArrayList<>();
+            List<PatArchive> patArchives1 = new ArrayList<>();
 
             try {
                 //鎮h�呭熀鏈俊鎭�
-                if(ObjectUtils.isNotEmpty(pm.getPatno())) {
+                if (ObjectUtils.isNotEmpty(pm.getPatno())) {
                     PatArchive patArchive = new PatArchive();
                     patArchive.setPatientno(pm.getPatno());
                     patArchive.setPageSize(5);
@@ -193,12 +196,12 @@
                         }
                     }
                 }
-            }catch (Exception ex) {
+            } catch (Exception ex) {
                 log.info("鍚屾偅鑰呭熀鏈俊鎭�:" + ex.getMessage());
             }
 
             try {
-                if(patArchives1.size()>0) {
+                if (patArchives1.size() > 0) {
                     pm.setPatid(patArchives1.get(0).getId());
                 }
                 //鍚屾鍑哄叆闄�
@@ -222,10 +225,11 @@
 
     /**
      * 鍚屾闂ㄨ瘖淇℃伅
+     *
      * @param
      * @return
      */
-    private  Integer syncOuthosp(String startTime,String endTime) {
+    private Integer syncOuthosp(String startTime, String endTime) {
         Integer count = 0;
         PatMedOuthosp patMedOuthosp = new PatMedOuthosp();
         patMedOuthosp.setLastStartTime(startTime);
@@ -252,7 +256,7 @@
 
                     }
                 }
-            }catch (Exception ex) {
+            } catch (Exception ex) {
                 log.info("鍚屾偅鑰呭熀鏈俊鎭�:" + ex.getMessage());
             }
 
@@ -278,7 +282,7 @@
     @Override
     public Integer selectPatMedInhospList(PatMedInhosp patMedInhosp) {
         List<PatMedInhosp> patMedInhospList = chMapper.selectPatMedInhospList(patMedInhosp);
-        log.info("鍙悓姝ョ梾浜烘暟閲�"+patMedInhospList.size());
+        log.info("鍙悓姝ョ梾浜烘暟閲�" + patMedInhospList.size());
         for (PatMedInhosp pm : patMedInhospList) {
             PatArchive patArchive = new PatArchive();
             patArchive.setPatientno(pm.getPatno());
@@ -323,10 +327,8 @@
 
     @Override
     public Boolean hnDataGather(HnDataGatherVO hnDataGatherVO) {
-        if(ObjectUtils.isEmpty(hnDataGatherVO.getStartTime()) )
-            hnDataGatherVO.setStartTime(new Date());
-        if(ObjectUtils.isEmpty(hnDataGatherVO.getEndTime()) )
-            hnDataGatherVO.setEndTime(new Date());
+        if (ObjectUtils.isEmpty(hnDataGatherVO.getStartTime())) hnDataGatherVO.setStartTime(new Date());
+        if (ObjectUtils.isEmpty(hnDataGatherVO.getEndTime())) hnDataGatherVO.setEndTime(new Date());
         LocalDate startDate = hnDataGatherVO.getStartTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
         LocalDate endDate = hnDataGatherVO.getEndTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
 
@@ -415,10 +417,10 @@
     @Override
     public Integer selectUserList(SysUser sysUser) {
         List<SysUser> sysUserList = chMapper.selectUserList(sysUser);
-        SysUser suerTemp=new SysUser();
+        SysUser suerTemp = new SysUser();
         List<SysUserDept> sysUserDeptAll = chMapper.yhyksxx(suerTemp);
         log.info("sysUserList鐨勯噰闆嗗埌鐨勬暟閲忎负锛歿}", sysUserList.size());
-        int i =0;// sysUser2Mapper.batchUser(sysUserList);
+        int i = 0;// sysUser2Mapper.batchUser(sysUserList);
         for (SysUser sysUser1 : sysUserList) {
 //            log.info("sysUser1鐨処D涓猴細{}", sysUser1.getUserId());
 //            log.info("sysUser1鐨凥ISUSERID涓猴細{}", sysUser1.getHisUserId());
@@ -438,16 +440,11 @@
 
             //鏂板鐢ㄦ埛涓庨儴闂�
             //List<SysUserDept> sysUserDept = chMapper.yhyksxx(sysUser1);
-            List<SysUserDept> sysUserDept = sysUserDeptAll.stream()
-                    .filter((SysUserDept b) -> b.getUserCode().equals(sysUser1.getHisUserId()))
-                    .collect(Collectors.toList());
+            List<SysUserDept> sysUserDept = sysUserDeptAll.stream().filter((SysUserDept b) -> b.getUserCode().equals(sysUser1.getHisUserId())).collect(Collectors.toList());
 
             for (SysUserDept sud : sysUserDept) {
                 if (usersTemp.size() > 0) {
                     sud.setUserId(usersTemp.get(0).getUserId());
-                    SysDept sysDeptTemp = sysDept2Mapper.selectDeptByCode(sud.getDeptCode());
-                    if (sysDeptTemp != null)
-                        sud.setDeptId(sysDeptTemp.getDeptId());
                     sysUserDeptMapper.insertSysUserDept(sud);
                 }
             }
@@ -458,20 +455,49 @@
 
     @Override
     public Integer selectDeptList(SysDept dept) {
-        int count=0;
+        int count = 0;
         List<SysDept> sysDepts = chMapper.selectDeptList(dept);
         log.info("selectDeptList鐨勯噰闆嗗埌鐨勬暟閲忎负锛歿}", sysDepts.size());
-       // count = sysDept2Mapper.batchDept(sysDepts);
-        for(SysDept row : sysDepts){
-            SysDept sysDeptTemp= sysDept2Mapper.selectDeptByCode(row.getDeptCode());
-            if(sysDeptTemp!=null&&sysDeptTemp.getDeptName()!=null){
+        // count = sysDept2Mapper.batchDept(sysDepts);
+        for (SysDept row : sysDepts) {
+            SysDept sysDeptTemp = sysDept2Mapper.selectDeptByCode(row.getDeptCode(), null);
+            if (sysDeptTemp != null && sysDeptTemp.getDeptName() != null) {
                 row.setDeptId(sysDeptTemp.getDeptId());
-                count+=sysDept2Mapper.updateDept(row);
-            }else{
-                count+=sysDept2Mapper.insertDept(row);
+                count += sysDept2Mapper.updateDept(row);
+            } else {
+                count += sysDept2Mapper.insertDept(row);
             }
         }
         return count;
     }
 
+
+    /**
+     * 妫�鏌ュ苟鎵ц鍒嗚〃鐨勬牳蹇冩柟娉�
+     *
+     * @param tableName 瑕佹鏌ョ殑琛ㄥ悕
+     */
+    private synchronized void checkAndShard(String tableName) {
+        long currentCount = shardingMapper.getTableCount(tableName);
+
+        if (currentCount >= SHARDING_THRESHOLD) {
+            log.warn("琛� '{}' 宸茶揪鍒板垎琛ㄩ槇鍊� {}锛屽噯澶囨墽琛屽垎琛ㄦ搷浣�...", tableName, SHARDING_THRESHOLD);
+
+            String newTableName = tableName + "_" + java.time.LocalDate.now().format(java.time.format.DateTimeFormatter.ofPattern("yyyy_MM"));
+            Long maxId = shardingMapper.getMaxId(tableName);
+            if (maxId == null) maxId = 0L;
+
+            shardingMapper.renameTable(tableName, newTableName);
+            log.info("宸插皢琛� '{}' 閲嶅懡鍚嶄负 '{}'", tableName, newTableName);
+
+            shardingMapper.createLikeTable(tableName, newTableName);
+            log.info("宸插垱寤烘柊琛� '{}'", tableName);
+
+            shardingMapper.setAutoIncrement(tableName, maxId + 1);
+            log.info("宸茶缃柊琛� '{}' 鐨勮嚜澧濱D璧峰鍊间负 {}", tableName, maxId + 1);
+
+            log.info("琛� '{}' 鐨勫垎琛ㄦ搷浣滃畬鎴愶紒", tableName);
+        }
+    }
+
 }
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 5fd05cb..297225c 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
@@ -5,9 +5,9 @@
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.gson.Gson;
 import com.ruoyi.common.core.redis.RedisCache;
+import com.ruoyi.common.dx.MessageSend;
 import com.ruoyi.common.enums.MsgLSEnum;
 import com.ruoyi.common.enums.ServiceFromEnum;
-import com.ruoyi.common.enums.VisitSendStateEnum;
 import com.ruoyi.common.enums.WxGZHEnum;
 import com.ruoyi.common.utils.HttpUtil;
 import com.ruoyi.common.utils.OkHttpExample;
@@ -19,10 +19,7 @@
 import com.ruoyi.system.service.ISysConfigService;
 import com.smartor.common.LSHospTokenUtil;
 import com.smartor.domain.*;
-import com.smartor.mapper.HeLibraryMapper;
-import com.smartor.mapper.ServiceSubtaskMapper;
-import com.smartor.mapper.ServiceTaskMapper;
-import com.smartor.mapper.SysUserImportMapper;
+import com.smartor.mapper.*;
 import com.smartor.service.*;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
@@ -83,6 +80,9 @@
     private IHNGatherPatArchiveService ihnGatherPatArchiveService;
 
     @Autowired
+    private IServiceSLTDHealthcareRecordService serviceSLTDHealthcareRecordService;
+
+    @Autowired
     private SysUserImportMapper sysUserImportMapper;
 
     @Autowired
@@ -93,7 +93,6 @@
 
     @Autowired
     private ISysConfigService configService;
-
 
     @Value("${localIP}")
     private String localIP;
@@ -146,6 +145,9 @@
 
     @Autowired
     IXHGatherPatArchiveService ixhGatherPatArchiveService;
+
+    @Autowired
+    ServiceSubtaskPreachformMapper serviceSubtaskPreachformMapper;
 
     @Autowired
     ICollectHISService icollectHis;
@@ -251,10 +253,59 @@
                 // 娌冲崡鏁版嵁閲囬泦
                 HnDataGatherVO hnDataGatherVO = new HnDataGatherVO();
                 log.info("銆恉ealHisData銆戞渤鍗楀紑濮嬮噰闆嗘暟鎹�");
+                Date startTime = Date.from(yesterdayZero.atZone(ZoneId.systemDefault()).toInstant());
+                Date endTime = Date.from(todayZero.atZone(ZoneId.systemDefault()).toInstant());
+
+                hnDataGatherVO.setStartTime(startTime);
+                hnDataGatherVO.setEndTime(endTime);
                 ihnGatherPatArchiveService.hnDataGather(hnDataGatherVO);
                 log.info("銆恉ealHisData銆戞渤鍗楃粨鏉熼噰闆嗘暟鎹�");
             } catch (Exception e) {
                 log.error("銆恉ealHisData銆戞渤鍗楁暟鎹噰闆嗗紓甯�", e);
+            }
+        } else if (active.trim().equals("sltd")) {
+            try {
+                // 鐪佺珛鍚屽痉鏁版嵁閲囬泦
+                log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滃叆闄⑩�濆紑濮嬮噰闆嗘暟鎹�");
+                String yesterday = LocalDate.now().minusDays(1).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+                ServiceSLTDInhospReqVO serviceSLTDInhospReqVO = new ServiceSLTDInhospReqVO();
+                serviceSLTDInhospReqVO.setOrgId("20001001");
+                serviceSLTDInhospReqVO.setCampusId(30001002L);
+                serviceSLTDInhospReqVO.setStartHeadTime(yesterday);
+                serviceSLTDInhospReqVO.setStartTailTime(yesterday);
+                List<String> list = new ArrayList<>();
+                list.add("FH0108.02");
+                serviceSLTDInhospReqVO.setHealthcareRecordTypeList(list);
+                serviceSLTDHealthcareRecordService.queryHealthcareRecordList(serviceSLTDInhospReqVO);
+                log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滃叆闄⑩�濈祼鏉熼噰闆嗘暟鎹�");
+
+                log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滈棬鎬ヨ瘖鈥濆紑濮嬮噰闆嗘暟鎹�");
+                serviceSLTDInhospReqVO.setStartHeadTime(null);
+                serviceSLTDInhospReqVO.setStartTailTime(null);
+                serviceSLTDInhospReqVO.setEncounterTimeStart(yesterday);
+                serviceSLTDInhospReqVO.setEncounterTimeEnd(yesterday);
+                List<String> list1 = new ArrayList<>();
+                list1.add("FH0108.01");
+                list1.add("FH0108.03");
+                serviceSLTDInhospReqVO.setHealthcareRecordTypeList(list1);
+                serviceSLTDHealthcareRecordService.queryHealthcareRecordList(serviceSLTDInhospReqVO);
+                log.info("銆恉ealHisData銆戞渤鍗楃粨鈥滈棬鎬ヨ瘖鈥濇潫閲囬泦鏁版嵁");
+
+                log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滃嚭闄⑩�濆紑濮嬮噰闆嗘暟鎹�");
+                serviceSLTDInhospReqVO.setStartHeadTime(null);
+                serviceSLTDInhospReqVO.setStartTailTime(null);
+                serviceSLTDInhospReqVO.setEncounterTimeStart(null);
+                serviceSLTDInhospReqVO.setEncounterTimeEnd(null);
+                serviceSLTDInhospReqVO.setPreOutHospitalHeadDate(yesterday);
+                serviceSLTDInhospReqVO.setPreOutHospitalTailDate(yesterday);
+                List<String> list2 = new ArrayList<>();
+                list2.add("FH0108.02");
+                serviceSLTDInhospReqVO.setHealthcareRecordTypeList(list2);
+                serviceSLTDHealthcareRecordService.queryHealthcareRecordList(serviceSLTDInhospReqVO);
+                log.info("銆恉ealHisData銆戞渤鍗楃粨鈥滃嚭闄⑩�濇潫閲囬泦鏁版嵁");
+
+            } catch (Exception e) {
+                log.error("銆恉ealHisData銆戠渷绔嬪悓寰锋暟鎹噰闆嗗紓甯�", e);
             }
         }
     }
@@ -330,9 +381,69 @@
             commonTaskcallMQ.setTaskid(serviceTask.getTaskid());
             commonTaskcallMQ.setPreachform(serviceTask.getPreachform());
             commonTaskcallMQ.setSendType("2");
-            sfHandlle(commonTaskcallMQ, localIP);
+
+            //閫氳繃浠诲姟ID鎷垮埌鎮h�呬俊鎭�,骞朵笖闅忚鏃堕棿寰楁槸浠婂ぉ涔嬪墠鐨�
+            ServiceSubtaskVO serviceSubtaskVO = new ServiceSubtaskVO();
+            serviceSubtaskVO.setTaskid(commonTaskcallMQ.getTaskid());
+            serviceSubtaskVO.setSendstate(2L);
+            serviceSubtaskVO.setVisitTime(new Date());
+            List<ServiceSubtask> selectServiceSubtaskList = serviceSubtaskMapper.queryServiceSubtaskList(serviceSubtaskVO);
+            for (ServiceSubtask serviceSubtask : selectServiceSubtaskList) {
+                sfHandlle(serviceSubtask);
+            }
+
         }
     }
+
+    /**
+     * 澶勭悊琛ュ伩浠诲姟
+     */
+    public void compensateTask() {
+        //鑾峰彇鍒皊endstate=3 骞朵笖 visit_time涓轰粖澶╃殑subtask
+        ServiceSubtaskVO serviceSubtaskVO = new ServiceSubtaskVO();
+        serviceSubtaskVO.setSendstate(3L);
+        serviceSubtaskVO.setVisitTime(new Date());
+        List<ServiceSubtask> serviceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO);
+        for (ServiceSubtask serviceSubtask : serviceSubtaskList) {
+            //鏍规嵁褰撳墠鐨勬墽琛屾柟寮忥紝鑾峰彇涓嬩竴绉嶆墽琛屾柟寮�
+            ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform();
+            serviceSubtaskPreachform.setTaskid(serviceSubtask.getTaskid());
+            serviceSubtaskPreachform.setSubid(serviceSubtask.getId());
+            serviceSubtaskPreachform.setOrgid(serviceSubtask.getOrgid());
+            List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
+            //鑾峰彇褰撳墠鎵ц鏂瑰紡鐨勫簭鍙�
+            Optional<Long> currentSort = serviceSubtaskPreachforms.stream().filter(item -> serviceSubtask.getCurrentPreachform().equals(item.getPreachform())).map(ServiceSubtaskPreachform::getSort).findFirst();
+            Optional<Long> id = serviceSubtaskPreachforms.stream().filter(item -> serviceSubtask.getCurrentPreachform().equals(item.getPreachform())).map(ServiceSubtaskPreachform::getId).findFirst();
+            if (currentSort.isPresent()) {
+                //1鍏堟鏌ヤ竴涓嬶紝鏄笉鏄湁鎵ц鐘舵�佹槸瀹屾垚鐨勶紙鎬曚箣鍓嶅凡缁忔湁瀹岀殑浜嗭紝娌℃湁灏唖ervuce_subtask鐨勭姸鎬佹敼鎴愬姛锛岃繖閲屽啀妫�鏌ヤ竴涓嬶級
+                boolean finishState = serviceSubtaskPreachforms.stream().allMatch(item -> item.getSendstate().equals("9"));
+                if (finishState) {
+                    serviceSubtask.setSendstate(6L);
+                    serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
+                    continue;
+                }
+
+                //2鍒ゆ柇涓�涓嬶紝褰撳墠鐨剆ort鏄笉鏄瓑浜庨渶瑕佹墽琛岀殑鎬讳釜鏁帮紝濡傛灉绛変簬鐨勮瘽锛岃鏄庢槸鏈�鍚庝竴涓紝鐩存帴灏唖ervuce_subtask鐨勭姸鎬佹敼鎴�5锛屾墽琛屽け璐ュ氨琛屼簡
+                Long cs = currentSort.get();
+                if (cs.equals(serviceSubtaskPreachforms.size())) {
+                    serviceSubtask.setSendstate(5L);
+                    serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
+                    //淇敼鍙戦�佹柟寮忕殑鐘舵�佷负澶辫触
+                    serviceSubtaskPreachform.setSendstate("5");
+                    serviceSubtaskPreachform.setId(id.get());
+                    serviceSubtaskPreachformMapper.updateServiceSubtaskPreachform(serviceSubtaskPreachform);
+                    continue;
+                }
+
+                //3.涓嶆槸鏈�鍚庝竴涓紝鑾峰彇鍒颁笅涓�涓墽琛屾柟寮�(鍥犱负閮芥槸鍦ㄤ粖澶╂墽琛岋紝閭e氨鐩存帴鍙戝嚭鍘诲氨瀹屼簡)
+                sfHandlle(serviceSubtask);
+
+            }
+
+        }
+
+    }
+
 
     /**
      * 鍒ゆ柇鏃ユ湡鏄惁鏄粖澶�
@@ -352,374 +463,334 @@
         return !localDate.isAfter(today);
     }
 
-    public void sfHandlle(CommonTaskcallMQ commonTaskcallMQ, String ip) {
-        log.info("銆恠fHandlle銆戝紑濮嬪鐞嗕换鍔★紝浠诲姟ID锛歿}", commonTaskcallMQ.getTaskid());
-        //鍒ゆ柇涓�涓媍ommonTaskcallMQ涓殑stopstate鏄惁涓巌vr_task涓殑涓�鑷达紝涓嶄竴鑷达紝鍒欒鏄庢槸鏆傚仠浜�
-        ServiceTask ivrTask1 = serviceTaskMapper.selectServiceTaskByTaskid(commonTaskcallMQ.getTaskid());
-
-        if (StringUtils.isNotEmpty(commonTaskcallMQ.getPreachform())) {
-            //濡備綍浠诲姟鍙戦�佹柟寮忎笉涓虹┖
-            String[] split = commonTaskcallMQ.getPreachform().split(",");
-            log.info("銆恠fHandlle銆戜换鍔″彂閫佹柟寮忥細{}", Arrays.toString(split));
-            for (String serviceFrom : split) {
-                String descByCode = ServiceFromEnum.getDescByCode(Integer.valueOf(serviceFrom));
-                //閫氳繃浠诲姟ID鎷垮埌鎮h�呬俊鎭�
-                ServiceSubtaskVO ivrTaskcall = new ServiceSubtaskVO();
-                ivrTaskcall.setTaskid(commonTaskcallMQ.getTaskid());
-                ivrTaskcall.setSendstate(2L);
-                List<ServiceSubtask> subtaskList = iServiceSubtaskService.selectServiceSubtaskList(ivrTaskcall);
-                //涓芥按鏈夌殑鍖婚櫌杩樻病娉曞仛闀挎湡浠诲姟闅忚
-                List<ServiceSubtask> subtaskList2 = new ArrayList<>();
-                if (visitHosp == 2) {
-                    try {
-                        for (ServiceSubtask serviceSubtask : subtaskList) {
-                            Boolean b = VisitSendStateEnum.getDescByCode(serviceSubtask.getOrgid());
-
-                            if (b) subtaskList2.add(serviceSubtask);
-                        }
-                    } catch (Exception e) {
-                        log.error("-------闀挎湡浠诲姟寮傚父涓猴細", e);
-                        continue;
-                    }
-//                    for (ServiceSubtask serviceSubtask : subtaskList) {
-//                        Boolean b = VisitSendStateEnum.getDescByCode(serviceSubtask.getOrgid());
-//
-//                        if (b) subtaskList2.add(serviceSubtask);
-//                    }
-                    subtaskList = subtaskList2;
-                }
-
-                // 鎸夌収 endtime 绂诲綋鍓嶆椂闂存渶杩戠殑鎺掑簭
-                List<ServiceSubtask> selectServiceSubtaskList = subtaskList.stream().sorted(Comparator.comparing(subtask -> Math.abs(subtask.getEndtime().getTime() - new Date().getTime()))).collect(Collectors.toList());
-
-                if (descByCode.equals("鐢佃瘽")) {
-                    String value = "";
-                    List<String> list = new ArrayList<>();
-                    for (ServiceSubtask serviceSubtask : selectServiceSubtaskList) {
-                        ServiceTask ivrTask = serviceTaskMapper.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
-                        if (ivrTask.getSendState() != null && ivrTask.getSendState() == 3 || ivrTask.getSendState() != null && ivrTask.getSendState() == 4) {
-                            //濡備綍浠诲姟琚�"鏆傚仠"鎴�"缁堟"
-                            break;
-                        }
-                        if (org.apache.commons.lang3.StringUtils.isEmpty(serviceSubtask.getPhone())) {
-                            serviceSubtask.setRemark("鎵嬫満鍙蜂负绌�");
-                            serviceSubtask.setSendstate(4L);
-                            serviceSubtask.setResult("error");
-//                            serviceSubtask.setFinishtime(new Date());
-                            serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
-                            continue;
-                        }
-                        boolean dateToday = isDateToday(serviceSubtask.getLongSendTime());
-                        //璇存槑鏄珛鍗冲彂閫�(鍏堟妸娑堟伅鏀惧埌cache-0涓紝   displayNo涓嶇煡閬撴�庝箞閰嶇疆)
-                        if (dateToday) {
-                            list.add(serviceSubtask.getId().toString());
-                            //鍦ㄥ瓙浠诲姟琛ㄩ噷璁板綍涓�涓�
-                            String uuid = UUID.randomUUID().toString();
-                            serviceSubtask.setResult("success");
-                            serviceSubtask.setRemark("闀挎湡浠诲姟锛岀數璇濊繘鍏ラ槦鍒楁垚鍔�");
-                            serviceSubtask.setGuid(uuid);
-                            serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
-
-                            //浠诲姟鍙戦�佽褰�
-                            ServiceSubtaskRecord serviceSubtaskRecord = new ServiceSubtaskRecord();
-                            serviceSubtaskRecord.setTaskid(serviceSubtask.getTaskid().toString());
-                            serviceSubtaskRecord.setSubtaskId(serviceSubtask.getId());
-                            serviceSubtaskRecord.setUuid(uuid);
-                            serviceSubtaskRecord.setTasktype(serviceSubtask.getType());
-                            serviceSubtaskRecord.setPreachform("3");
-                            serviceSubtaskRecord.setStartTime(System.currentTimeMillis());
-                            serviceSubtaskRecord.setRemark("闀挎湡浠诲姟锛岀數璇濊繘鍏ラ槦鍒楁垚鍔�");
-                            serviceSubtaskRecordService.insertServiceSubtaskRecord(serviceSubtaskRecord);
-
-                        }
-                    }
-                    //灏嗚鎵ц鐨勬斁鍒扮紦瀛樹腑
-                    if (list.size() > 0) {
-//                        redisCache.setCacheListLeft("cache-0", list);
-                        redisCache.setCacheListLeftAndDistinct("cache-0", list);
-                        log.info("銆恠fHandlle銆戠數璇濅换鍔″凡鍔犲叆闃熷垪锛屾暟閲忥細{}", list.size());
-                    }
-                } else if (descByCode.equals("澶氬獟浣�")) {
-                    //澶氬獟浣�
-                } else if (descByCode.equals("绾歌川")) {
-                    //绾歌川
-                } else if (descByCode.equals("寰俊灏忕▼搴�")) {
-                    //寰俊灏忕▼搴�
-                    log.info("銆恠fHandlle銆戝鐞嗗井淇″皬绋嬪簭浠诲姟锛屼换鍔′俊鎭細{}", ivrTask1);
-                    if (ObjectUtils.isNotEmpty(ivrTask1) && ivrTask1.getPatCycle() == 1) {
-                        //璇存槑璇ヤ换鍔$殑鎮h�呮槸寰幆鎵ц鐨�
-                        ServiceSubtaskVO serviceSubtaskVO = new ServiceSubtaskVO();
-                        serviceSubtaskVO.setTaskid(ivrTask1.getTaskid());
-                        List<ServiceSubtask> serviceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO);
-                        //杩欓噷闇�瑕佹牴鎹韩浠借瘉鍘婚噸
-                        List<ServiceSubtask> serviceSubtaskListFilter = new ArrayList<>();
-                        aa:
-                        for (ServiceSubtask serviceSubtask : serviceSubtaskList) {
-                            for (ServiceSubtask ss : serviceSubtaskListFilter) {
-                                if (ss.getSfzh().equals(serviceSubtask.getSfzh())) {
-                                    continue aa;
-                                }
-                            }
-                            serviceSubtaskListFilter.add(serviceSubtask);
-                        }
-                        for (ServiceSubtask serviceSubtask : serviceSubtaskListFilter) {
-                            //灏嗗瓙浠诲姟ID鍒犻櫎 銆乻endstate鏀规垚3
-                            serviceSubtask.setSendstate(3L);
-                            serviceSubtask.setId(null);
-                            serviceSubtask.setFinishtime(null);
-                            serviceSubtask.setCreateTime(new Date());
-                            serviceSubtask.setUpdateTime(new Date());
-                            //澶勭悊閲嶅鏂板闂锛屽厛鏌ヤ竴涓嬩粖澶╂槸涓嶆槸鏈夋柊澧炶繃锛屾柊澧炶繃灏变笉鏂板浜�
-                            ServiceSubtaskVO ssvo = new ServiceSubtaskVO();
-                            LocalDate today = LocalDate.now();
-                            LocalTime startOfDay = LocalTime.of(0, 0, 0);
-                            LocalTime endOfDay = LocalTime.of(23, 59, 59);
-                            Date startOfDayDate = Date.from(today.atTime(startOfDay).atZone(ZoneId.systemDefault()).toInstant());
-                            Date endOfDayDate = Date.from(today.atTime(endOfDay).atZone(ZoneId.systemDefault()).toInstant());
-                            ssvo.setCreateStartTime(startOfDayDate);
-                            ssvo.setCreateEndTime(endOfDayDate);
-                            ssvo.setCreateBy(serviceSubtask.getCreateBy());
-                            ssvo.setSendname(serviceSubtask.getSendname());
-                            ssvo.setSfzh(serviceSubtask.getSfzh());
-                            List<ServiceSubtask> serviceSubtaskListByCreateTime = serviceSubtaskMapper.selectServiceSubtaskListByCreateTime(ssvo);
-                            if (CollectionUtils.isEmpty(serviceSubtaskListByCreateTime))
-                                serviceSubtaskMapper.insertServiceSubtask(serviceSubtask);
-                        }
-                    }
-                } else if (descByCode.equals("鐭俊")) {
-                    RSAPublicKeyExample rsaPublicKeyExample = new RSAPublicKeyExample();
-                    String taskId = rsaPublicKeyExample.encryptedData(ivrTask1.getTaskid().toString(), pub_key);
-                    for (ServiceSubtask serviceSubtask : selectServiceSubtaskList) {
-                        log.info("銆恠fHandlle銆戝鐞嗙煭淇¢暱鏈熶换鍔★紝鎮h�匢D锛歿}", serviceSubtask.getPatid());
-                        boolean dateToday = isDateToday(serviceSubtask.getLongSendTime());
-                        if (dateToday) {
-                            try {
-                                //鍏堝垽鏂偅鑰呮槸涓嶆槸杩樿鍙戦��
-                                PatArchive patArchive = patArchiveService.selectPatArchiveByPatid(serviceSubtask.getPatid());
-                                if (!Objects.isNull(patArchive) && patArchive.getNotrequiredFlag() == "1") {
-                                    //涓嶉渶瑕佸彂閫�
-                                    serviceSubtask.setResult("error");
-                                    serviceSubtask.setRemark(patArchive.getNotrequiredreason());
-                                    serviceSubtask.setSendstate(4L);
-                                    iServiceSubtaskService.insertServiceSubtask(serviceSubtask);
-                                    continue;
-                                }
-                                String patid = rsaPublicKeyExample.encryptedData(serviceSubtask.getPatid().toString(), pub_key);
-                                String subId = rsaPublicKeyExample.encryptedData(serviceSubtask.getId().toString(), pub_key);
-                                SendMagParam sendMagParam = new SendMagParam();
-                                sendMagParam.setType("4");
-                                ServiceOutPath serviceOutPath = new ServiceOutPath();
-                                serviceOutPath.setParam1(taskId);
-                                serviceOutPath.setParam2(patid);
-                                serviceOutPath.setParam3(ivrTask1.getTaskName());
-                                serviceOutPath.setParam6(subId);
-                                serviceOutPath.setCreateTime(new Date());
-                                iServiceOutPathService.insertServiceOutPath(serviceOutPath);
-                                String format = String.format("%03X", serviceOutPath.getId());
-                                serviceOutPath.setRadix(format);
-                                serviceOutPath.setUpdateTime(new Date());
-                                iServiceOutPathService.updateServiceOutPath(serviceOutPath);
-                                //鍏堝垽鏂竴涓嬪彂鐨勬槸涓嶆槸瀹f暀
-                                if (!"3".equals(serviceSubtask.getType())) {
-                                    sendMagParam.setPhone(serviceSubtask.getPhone());
-                                    sendMagParam.setUrl(ip + ":" + req_path + "/wt?p=" + format);
-                                    sendMagParam.setContent("銆愭柊鍗庡尰闄€�戞偍濂斤紝閭�璇锋偍濉啓鍑洪櫌璋冩煡琛紝璇风偣鍑�" + sendMagParam.getUrl() + "濉啓銆傛劅璋㈡偍閰嶅悎锛�");
-                                } else {
-                                    HeLibrary heLibrary = heLibraryMapper.selectHeLibraryById(serviceSubtask.getLibtemplateid());
-                                    if ("2".equals(heLibrary.getHetype())) {
-                                        sendMagParam.setPhone(serviceSubtask.getPhone());
-                                        sendMagParam.setContent(heLibrary.getPreachcontent());
-                                    }
-                                }
-                                String isSuccess = null;
-                                if (visitHosp == 1) {
-                                    Map<String, String> req = new HashMap<>();
-                                    req.put("phone", sendMagParam.getPhone());
-                                    req.put("content", sendMagParam.getContent());
-                                    isSuccess = HttpUtil.postJsonRequest(xhsmsPath, new Gson().toJson(req));
-                                } else if (visitHosp == 2) {
-                                    String url = configService.selectConfigByKey("token.360",serviceSubtask.getOrgid());
-                                    //涓芥按鐨勭煭淇″彂閫佹柟寮�
-                                    Map<String, String> map = MsgLSEnum.getAddressByCode(serviceSubtask.getOrgid());
-                                    String token = LSHospTokenUtil.getToken(serviceSubtask.getOrgid(),url);
-                                    if (ObjectUtils.isNotEmpty(map) && StringUtils.isEmpty(map.get("address"))) {
-                                        ServiceSubtask ss = new ServiceSubtask();
-                                        ss.setResult("error");
-                                        ss.setRemark("鐭俊鍙戦�佸け璐�,璇ユ満鏋勬病鏈夐厤缃煭淇″湴鍧�");
-                                        ss.setSendstate(5L);
-                                        ss.setId(serviceSubtask.getId());
-//                                        ss.setFinishtime(new Date());
-                                        serviceSubtaskMapper.updateServiceSubtask(ss);
-                                        continue;
-                                    }
-                                    log.info("銆恠fHandlle銆戜附姘寸煭淇″彂閫侊紝鍦板潃锛歿}锛屽弬鏁帮細{}锛屾満鏋処D锛歿}", map.get("address"), sendMagParam, serviceSubtask.getOrgid());
-                                    String dxCode = getDXCode(map.get("address"), sendMagParam.getPhone(), sendMagParam.getContent(), map.get("sendPersonId"), map.get("sendPersonName"), MsgLSEnum.getHeaderByCode(serviceSubtask.getOrgid()), token);
-                                    log.info("銆恠fHandlle銆戜附姘寸煭淇″彂閫佺粨鏋滐細{}", dxCode);
-                                    ObjectMapper objectMapper = new ObjectMapper();
-                                    Map<String, Object> textParam = objectMapper.readValue(dxCode, Map.class);
-                                    String code = textParam.get("Code").toString();
-                                    if (code.equals("0")) {
-                                        isSuccess = "true";
-                                    }
-                                }else if (visitHosp == 3) {//甯備竴鍖婚櫌
-                                    String content=sendMagParam.getContent().replace("銆愭柊鍗庡尰闄€��","");
-                                    smsUtils.sendSms(xhsmsPath,xhsmsAccount,xhsmsPwd,sendMagParam.getPhone(),content);
-                                }
-                                //浠诲姟鍙戦�佽褰�
-                                ServiceSubtaskRecord serviceSubtaskRecord = new ServiceSubtaskRecord();
-                                serviceSubtaskRecord.setTaskid(serviceSubtask.getTaskid().toString());
-                                serviceSubtaskRecord.setUuid(UUID.randomUUID().toString());
-                                serviceSubtaskRecord.setTasktype(serviceSubtask.getType());
-                                serviceSubtaskRecord.setPreachform("4");
-                                serviceSubtaskRecord.setStartTime(System.currentTimeMillis());
-                                serviceSubtaskRecord.setResult("success");
-                                if (StringUtils.isNotEmpty(isSuccess) && !isSuccess.equals("true"))
-                                    serviceSubtaskRecord.setResult("error");
-                                serviceSubtaskRecordService.insertServiceSubtaskRecord(serviceSubtaskRecord);
-
-                                //鍙戦�佸畬鎴愬悗锛屼慨鏀圭姸鎬�
-                                serviceSubtask.setSendstate(3L);
-                                if (StringUtils.isNotEmpty(isSuccess) && !isSuccess.equals("true")) {
-                                    serviceSubtask.setResult("success");
-                                    serviceSubtask.setRemark("鐭俊鍙戦�佹垚鍔�");
-                                } else {
-                                    serviceSubtask.setResult("error");
-                                    serviceSubtask.setSendstate(5L);
-                                    serviceSubtask.setRemark("鐭俊鍙戦�佸け璐�");
-                                }
-                                iServiceSubtaskService.updateServiceSubtask(serviceSubtask);
-                            } catch (Exception e) {
-                                String guid = UUID.randomUUID().toString();
-                                log.error("銆恠fHandlle銆戦暱鏈熶换鍔$煭淇″彂閫佸け璐ワ紝鍘熷洜锛歿}锛孏UID锛歿}", e.getMessage(), guid);
-                                serviceSubtask.setResult("error");
-                                serviceSubtask.setRemark("绯荤粺閿欒");
-                                serviceSubtask.setSendstate(5L);
-                                serviceSubtask.setGuid(guid);
-                                iServiceSubtaskService.updateServiceSubtask(serviceSubtask);
-                            }
-                        }
-                    }
-                } else if (descByCode.equals("鍏紬鍙�")) {
-                    log.info("銆恠fHandlle銆戝鐞嗗叕浼楀彿浠诲姟锛屼换鍔′俊鎭細{}", ivrTask1);
-                    //鍏紬鍙�
-                    RSAPublicKeyExample rsaPublicKeyExample = new RSAPublicKeyExample();
-                    String taskId = rsaPublicKeyExample.encryptedData(ivrTask1.getTaskid().toString(), pub_key);
-                    for (ServiceSubtask serviceSubtask : selectServiceSubtaskList) {
-                        boolean dateToday = isDateToday(serviceSubtask.getLongSendTime());
-                        if (dateToday) {
-                            try {
-                                //鍏堝垽鏂偅鑰呮槸涓嶆槸杩樿鍙戦��
-                                PatArchive patArchive = patArchiveService.selectPatArchiveByPatid(serviceSubtask.getPatid());
-                                if (!Objects.isNull(patArchive) && patArchive.getNotrequiredFlag() == "1") {
-                                    //涓嶉渶瑕佸彂閫�
-                                    serviceSubtask.setResult("error");
-                                    serviceSubtask.setRemark(patArchive.getNotrequiredreason());
-                                    serviceSubtask.setSendstate(4L);
-                                    iServiceSubtaskService.insertServiceSubtask(serviceSubtask);
-                                    continue;
-                                }
-                                String patid = rsaPublicKeyExample.encryptedData(serviceSubtask.getPatid().toString(), pub_key);
-                                String url = null;
-                                url = ip + ":" + req_path + "/outsideChainwt?param1=" + taskId + "&param2=" + patid + "&param3=" + URLEncoder.encode(ivrTask1.getTaskName(), StandardCharsets.UTF_8.toString()) + "&param5=false";
-
-                                //鑾峰彇寰俊鍏紬鍙疯姹備俊鎭牴鎹満鏋処D
-                                List<String> wxqqxx = WxGZHEnum.getDescByCode(patArchive.getOrgid());
-                                if (CollectionUtils.isEmpty(wxqqxx) || wxqqxx.size() < 4) {
-                                    ServiceSubtask ss = new ServiceSubtask();
-                                    ss.setResult("error");
-                                    ss.setRemark("璇ユ満鏋勭殑鍏紬鍙烽厤缃俊鎭笉鍏紝鏃犳硶閫氳繃鍏紬鍙峰彂閫�");
-                                    ss.setSendstate(5L);
-                                    ss.setId(serviceSubtask.getId());
-                                    serviceSubtaskMapper.updateServiceSubtask(ss);
-                                    continue;
-                                }
-
-                                if (StringUtils.isEmpty(patArchive.getPatidHis())) {
-                                    ServiceSubtask ss = new ServiceSubtask();
-                                    ss.setResult("error");
-                                    ss.setRemark("鍏紬鍙峰彂閫佸け璐�,his绯荤粺鐨勬偅鑰卛d涓虹┖");
-                                    ss.setSendstate(5L);
-                                    ss.setId(serviceSubtask.getId());
-                                    serviceSubtaskMapper.updateServiceSubtask(ss);
-                                    continue;
-                                }
-                                String wxCode = "";
-                                if (visitHosp == 3) {//甯備竴鍖婚櫌
-                                    String urlTemp="http://192.200.54.14:5003/sfjk/SendMessage?sfzh="+serviceSubtask.getSfzh()
-                                            +"&title=鎮ㄥソ锛岄個璇锋偍濉啓鍑洪櫌璋冩煡琛紝璇风偣鍑诲~鍐欍��&content=鎮ㄥソ锛岄個璇锋偍濉啓鍑洪櫌璋冩煡琛紝璇风偣鍑诲~鍐欍��&phone="+patArchive.getTelcode()
-                                            +"&url="+url+"&key=ff76f8904f5f32b5ee1739e8ea46e60g";
-                                    HttpUtils.sendGet(urlTemp);
-                                }else{
-                                    wxCode = getWXCode(serviceSubtask.getSfzh(), url, serviceSubtask.getTaskName(), serviceSubtask.getTaskDesc(), patArchive.getTelcode(), serviceSubtask.getSendname(), patArchive.getPatidHis(), wxqqxx);
-                                }
-                                Map<String, Object> map = JSONObject.parseObject(wxCode, Map.class);
-                                //浠诲姟鍙戦�佽褰�
-                                ServiceSubtaskRecord serviceSubtaskRecord = new ServiceSubtaskRecord();
-                                serviceSubtaskRecord.setTaskid(serviceSubtask.getTaskid().toString());
-                                serviceSubtaskRecord.setUuid(UUID.randomUUID().toString());
-                                serviceSubtaskRecord.setTasktype(serviceSubtask.getType());
-                                serviceSubtaskRecord.setPreachform("4");
-                                serviceSubtaskRecord.setStartTime(System.currentTimeMillis());
-                                serviceSubtaskRecord.setResult("success");
-                                if (!map.isEmpty() && (Boolean) map.get("succ") == false)
-                                    serviceSubtaskRecord.setResult("error");
-                                serviceSubtaskRecordService.insertServiceSubtaskRecord(serviceSubtaskRecord);
-
-                                //鍙戦�佸畬鎴愬悗锛屼慨鏀圭姸鎬�
-                                serviceSubtask.setSendstate(3L);
-                                if ((Boolean) map.get("succ") == true) {
-                                    serviceSubtask.setResult("success");
-                                } else {
-                                    log.error("銆恠fHandlle銆戝叕浼楀彿鍙戦�佸け璐ワ紝鎮h�呬俊鎭細{}锛岄敊璇俊鎭細{}", serviceSubtask, map.get("msg"));
-                                    serviceSubtask.setResult("error");
-                                    serviceSubtask.setSendstate(5L);
-                                    serviceSubtask.setRemark(map.get("msg").toString());
-                                }
-                                iServiceSubtaskService.updateServiceSubtask(serviceSubtask);
-                            } catch (Exception e) {
-                                String guid = UUID.randomUUID().toString();
-                                log.error("銆恠fHandlle銆戦暱鏈熶换鍔″叕浼楀彿鍙戦�佸け璐ワ紝鍘熷洜锛歿}锛孏UID锛歿}", e.getMessage(), guid);
-                                serviceSubtask.setResult("error");
-                                serviceSubtask.setRemark("绯荤粺閿欒");
-                                serviceSubtask.setSendstate(5L);
-                                serviceSubtask.setGuid(guid);
-                                iServiceSubtaskService.updateServiceSubtask(serviceSubtask);
-                            }
-                        }
-                    }
-                }
-                //閫氱煡 MQ 娑堟伅宸茶鎺ユ敹,鍙互ACK(浠庨槦鍒椾腑鍒犻櫎)浜�   锛堣繖涓渶瑕佹牴鎹笟鍔″啀鍘诲鐞咥CK锛�
-            }
+    public void sfHandlle(ServiceSubtask serviceSubtask) {
+        //杩欓噷闇�瑕佹牴鎹韩浠借瘉鍘婚噸(缁欏井淇″皬绋嬪簭鐨勫浐瀹氫换鍔$敤鐨�)
+        List<ServiceSubtask> serviceSubtaskListFilter = new ArrayList<>();
+        ServiceTask ivrTask1 = serviceTaskMapper.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
+        ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform();
+        serviceSubtaskPreachform.setTaskid(serviceSubtask.getTaskid());
+        serviceSubtaskPreachform.setSubid(serviceSubtask.getId());
+        //鑾峰彇鍙戦�佹柟寮�
+        String sendPreachform = getSendPreachform(serviceSubtaskPreachform, serviceSubtask);
+        if (sendPreachform.equals("-1") || serviceSubtask.getSendstate() == 6 || serviceSubtask.getSendstate() == 5 || serviceSubtask.getSendstate() == 4) {
+            //璇存槑宸茬粡鍏ㄩ儴閬嶅巻瀹屼簡锛屽綋鍓嶇殑鎵ц鏂瑰紡搴忓彿鏄渶鍚庝竴涓簡   鎴栬��  璇ユ偅鑰呭凡缁忛殢璁跨粨鏉燂紙鎴愬姛鎴栧け璐ヤ簡鎴栦笉鎵ц锛�
+            return;
         }
+        //鍏堝垽鏂偅鑰呮槸涓嶆槸杩樿鍙戦��
+        PatArchive patArchive = patArchiveService.selectPatArchiveByPatid(serviceSubtask.getPatid());
+        if (!Objects.isNull(patArchive) && patArchive.getNotrequiredFlag() == "1") {
+            //涓嶉渶瑕佸彂閫�
+            serviceSubtask.setResult("鎮h�呬笉闇�瑕侀殢璁�");
+            serviceSubtask.setRemark(patArchive.getNotrequiredreason());
+            serviceSubtask.setSendstate(4L);
+            iServiceSubtaskService.insertServiceSubtask(serviceSubtask);
+            setSuccessPreachForm(serviceSubtask, "-1", "涓嶉渶瑕佹墽琛�", "6");
+            return;
+        }
+
+        String descByCode = ServiceFromEnum.getDescByCode(Integer.valueOf(sendPreachform));
+        if (descByCode.equals("鐢佃瘽")) {
+            List<String> list = new ArrayList<>();
+            ServiceTask ivrTask = serviceTaskMapper.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
+            if (ivrTask.getSendState() != null && ivrTask.getSendState() == 3 || ivrTask.getSendState() != null && ivrTask.getSendState() == 4) {
+                //濡備綍浠诲姟琚�"鏆傚仠"鎴�"缁堟"
+                return;
+            }
+
+            if (org.apache.commons.lang3.StringUtils.isEmpty(serviceSubtask.getPhone())) {
+                setSuccessPreachForm(serviceSubtask, sendPreachform, "鎵嬫満鍙蜂负绌�", "4");
+                return;
+            }
+            boolean dateToday = isDateToday(serviceSubtask.getVisitTime());
+            //璇存槑鏄珛鍗冲彂閫�(鍏堟妸娑堟伅鏀惧埌cache-0涓紝   displayNo涓嶇煡閬撴�庝箞閰嶇疆)
+            if (dateToday) {
+                list.add(serviceSubtask.getId().toString());
+                //鍦ㄥ瓙浠诲姟琛ㄩ噷璁板綍涓�涓�
+                setSuccessPreachForm(serviceSubtask, sendPreachform, "闀挎湡浠诲姟锛岀數璇濊繘鍏ラ槦鍒楁垚鍔�", "2");
+                //浠诲姟鍙戦�佽褰�
+                ServiceSubtaskRecord serviceSubtaskRecord = new ServiceSubtaskRecord();
+                serviceSubtaskRecord.setTaskid(serviceSubtask.getTaskid().toString());
+                serviceSubtaskRecord.setSubtaskId(serviceSubtask.getId());
+                serviceSubtaskRecord.setUuid(UUID.randomUUID().toString());
+                serviceSubtaskRecord.setTasktype(serviceSubtask.getType());
+                serviceSubtaskRecord.setPreachform("3");
+                serviceSubtaskRecord.setStartTime(System.currentTimeMillis());
+                serviceSubtaskRecord.setRemark("闀挎湡浠诲姟锛岀數璇濊繘鍏ラ槦鍒楁垚鍔�");
+                serviceSubtaskRecordService.insertServiceSubtaskRecord(serviceSubtaskRecord);
+            }
+            //灏嗚鎵ц鐨勬斁鍒扮紦瀛樹腑
+            if (list.size() > 0) {
+                redisCache.setCacheListLeftAndDistinct("cache-0", list);
+                log.info("銆恠fHandlle銆戠數璇濅换鍔″凡鍔犲叆闃熷垪锛屾暟閲忥細{}", list.size());
+            }
+        } else if (descByCode.equals("寰俊灏忕▼搴�")) {
+            //寰俊灏忕▼搴�
+            if (ObjectUtils.isNotEmpty(ivrTask1) && ivrTask1.getPatCycle() == 1) {
+                //璇存槑璇ヤ换鍔$殑鎮h�呮槸寰幆鎵ц鐨�
+                //鍒ゆ柇鎮h�呰繃婊ら泦鍚堜腑锛屾槸鍚﹀瓨鍦ㄥ綋鍓嶆墽琛屾偅鑰呯殑韬唤璇�
+                boolean continutFlag = false;
+                for (ServiceSubtask ss : serviceSubtaskListFilter) {
+                    if (ss.getSfzh().equals(serviceSubtask.getSfzh())) {
+                        continutFlag = true;
+                    }
+                }
+                //濡傛灉瀛樺湪褰撳墠鎵ц鎮h�呯殑韬唤璇侊紝鍒欎笉鎵ц璇ユ偅鑰呬簡
+                if (continutFlag) {
+                    return;
+                }
+
+                //灏嗗瓙浠诲姟ID鍒犻櫎 銆乻endstate鏀规垚3锛堝惊鐜换鍔″氨鏄繖鏍凤級
+                serviceSubtask.setSendstate(3L);
+                serviceSubtask.setId(null);
+                serviceSubtask.setFinishtime(null);
+                serviceSubtask.setCreateTime(new Date());
+                serviceSubtask.setUpdateTime(new Date());
+                serviceSubtaskMapper.insertServiceSubtask(serviceSubtask);
+
+                //灏嗗綋鍓嶈鎵ц鐨勬偅鑰呮斁鍒拌繃婊ゆ偅鑰呴泦鍚堜腑
+                serviceSubtaskListFilter.add(serviceSubtask);
+            }
+        } else if (descByCode.equals("鐭俊")) {
+            RSAPublicKeyExample rsaPublicKeyExample = new RSAPublicKeyExample();
+            String taskId = rsaPublicKeyExample.encryptedData(ivrTask1.getTaskid().toString(), pub_key);
+            log.info("銆恠fHandlle銆戝鐞嗙煭淇¢暱鏈熶换鍔★紝鎮h�匢D锛歿}", serviceSubtask.getPatid());
+            boolean dateToday = isDateToday(serviceSubtask.getVisitTime());
+            if (dateToday) {
+                try {
+                    String patid = rsaPublicKeyExample.encryptedData(serviceSubtask.getPatid().toString(), pub_key);
+                    String subId = rsaPublicKeyExample.encryptedData(serviceSubtask.getId().toString(), pub_key);
+                    SendMagParam sendMagParam = new SendMagParam();
+                    sendMagParam.setType("4");
+                    ServiceOutPath serviceOutPath = new ServiceOutPath();
+                    serviceOutPath.setParam1(taskId);
+                    serviceOutPath.setParam2(patid);
+                    serviceOutPath.setParam3(ivrTask1.getTaskName());
+                    serviceOutPath.setParam6(subId);
+                    serviceOutPath.setCreateTime(new Date());
+                    iServiceOutPathService.insertServiceOutPath(serviceOutPath);
+                    String format = String.format("%03X", serviceOutPath.getId());
+                    serviceOutPath.setRadix(format);
+                    serviceOutPath.setUpdateTime(new Date());
+                    iServiceOutPathService.updateServiceOutPath(serviceOutPath);
+                    //鍏堝垽鏂竴涓嬪彂鐨勬槸涓嶆槸瀹f暀
+                    if (!"3".equals(serviceSubtask.getType())) {
+                        sendMagParam.setPhone(serviceSubtask.getPhone());
+                        sendMagParam.setUrl(localIP + ":" + req_path + "/wt?p=" + format);
+                        //濡傛灉type鏄闊抽殢璁跨殑璇濓紙璇存槑琛ュ伩鍙戦�佹柟寮忎腑鏈夌數璇濋殢璁跨殑鏂瑰紡锛岃繖閲岀殑澶栭摼灏卞湴鍧�鍙兘鐢�/sf锛�
+                        if (serviceSubtask.getType().equals("1"))
+                            sendMagParam.setUrl(localIP + ":" + req_path + "/sf?p=" + format);
+                        sendMagParam.setContent("鎮ㄥソ锛岄個璇锋偍濉啓鍑洪櫌璋冩煡琛紝璇风偣鍑�" + sendMagParam.getUrl() + "濉啓銆傛劅璋㈡偍閰嶅悎锛�");
+                    } else {
+                        HeLibrary heLibrary = heLibraryMapper.selectHeLibraryById(serviceSubtask.getLibtemplateid());
+                        if ("2".equals(heLibrary.getHetype())) {
+                            sendMagParam.setPhone(serviceSubtask.getPhone());
+                            sendMagParam.setContent(heLibrary.getPreachcontent());
+                        }
+                    }
+                    String isSuccess = null;
+                    if (visitHosp == 1) {
+                        Map<String, String> req = new HashMap<>();
+                        req.put("phone", sendMagParam.getPhone());
+                        req.put("content", sendMagParam.getContent());
+                        isSuccess = HttpUtil.postJsonRequest(xhsmsPath, new Gson().toJson(req));
+                    } else if (visitHosp == 2) {
+                        String url = configService.selectConfigByKey("token.360", serviceSubtask.getOrgid());
+                        //涓芥按鐨勭煭淇″彂閫佹柟寮�
+                        Map<String, String> map = MsgLSEnum.getAddressByCode(serviceSubtask.getOrgid());
+                        String token = LSHospTokenUtil.getToken(serviceSubtask.getOrgid(), url);
+                        if (ObjectUtils.isNotEmpty(map) && StringUtils.isEmpty(map.get("address"))) {
+                            setSuccessPreachForm(serviceSubtask, sendPreachform, "鐭俊鍙戦�佸け璐�,璇ユ満鏋勬病鏈夐厤缃煭淇″湴鍧�", "5");
+                            return;
+                        }
+                        log.info("銆恠fHandlle銆戜附姘寸煭淇″彂閫侊紝鍦板潃锛歿}锛屽弬鏁帮細{}锛屾満鏋処D锛歿}", map.get("address"), sendMagParam, serviceSubtask.getOrgid());
+                        String dxCode = getDXCode(map.get("address"), sendMagParam.getPhone(), sendMagParam.getContent(), map.get("sendPersonId"), map.get("sendPersonName"), MsgLSEnum.getHeaderByCode(serviceSubtask.getOrgid()), token);
+                        log.info("銆恠fHandlle銆戜附姘寸煭淇″彂閫佺粨鏋滐細{}", dxCode);
+                        ObjectMapper objectMapper = new ObjectMapper();
+                        Map<String, Object> textParam = objectMapper.readValue(dxCode, Map.class);
+                        String code = textParam.get("Code").toString();
+                        if (code.equals("0")) {
+                            isSuccess = "true";
+                        }
+                    } else if (visitHosp == 4) {
+                        //鐪佺珛鍚屽痉鐨勭煭淇″彂閫佹柟寮�
+                        JSONObject data = MessageSend.sendMsg(sendMagParam.getContent(), "2", sendMagParam.getPhone(), LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
+                        String code = data.get("code").toString();
+                        if (StringUtils.isNotEmpty(code) && code.equals("00000")) {
+                            isSuccess = "true";
+                        }
+                    } else if (visitHosp == 3) {//甯備竴鍖婚櫌
+                        String content = sendMagParam.getContent().replace("銆愭柊鍗庡尰闄€��", "");
+                        String result = smsUtils.sendSms(xhsmsPath, xhsmsAccount, xhsmsPwd, sendMagParam.getPhone(), content);
+                        //杩欓噷闇�瑕佹牴鎹畆esult杩斿洖鐨勫�煎幓鍒ゆ柇锛屾槸鍚︽垚鍔燂紝鐒跺悗灏嗗�艰祴鍊肩粰isSuccess
+
+
+                    }
+                    //浠诲姟鍙戦�佽褰�
+                    ServiceSubtaskRecord serviceSubtaskRecord = new ServiceSubtaskRecord();
+                    serviceSubtaskRecord.setTaskid(serviceSubtask.getTaskid().toString());
+                    serviceSubtaskRecord.setUuid(UUID.randomUUID().toString());
+                    serviceSubtaskRecord.setTasktype(serviceSubtask.getType());
+                    serviceSubtaskRecord.setPreachform("4");
+                    serviceSubtaskRecord.setStartTime(System.currentTimeMillis());
+                    serviceSubtaskRecord.setResult("success");
+                    if (StringUtils.isNotEmpty(isSuccess) && !isSuccess.equals("true"))
+                        serviceSubtaskRecord.setResult("error");
+                    serviceSubtaskRecordService.insertServiceSubtaskRecord(serviceSubtaskRecord);
+
+                    //鍙戦�佸畬鎴愬悗锛屼慨鏀圭姸鎬�
+                    serviceSubtask.setSendstate(3L);
+                    if (StringUtils.isNotEmpty(isSuccess) && isSuccess.equals("true")) {
+                        serviceSubtask.setResult("success");
+                        serviceSubtask.setRemark("鐭俊鍙戦�佹垚鍔�");
+                        setSuccessPreachForm(serviceSubtask, sendPreachform, "鐭俊鍙戦�佹垚鍔�", "2");
+                    } else {
+                        serviceSubtask.setResult("error");
+                        serviceSubtask.setRemark("鐭俊鍙戦�佸け璐�");
+                        setSuccessPreachForm(serviceSubtask, sendPreachform, "鐭俊鍙戦�佸け璐�", "5");
+                    }
+                } catch (Exception e) {
+                    String guid = UUID.randomUUID().toString();
+                    log.error("銆恠fHandlle銆戦暱鏈熶换鍔$煭淇″彂閫佸け璐ワ紝鍘熷洜锛歿}锛孏UID锛歿}", e.getMessage(), guid);
+                    setSuccessPreachForm(serviceSubtask, sendPreachform, "闀挎湡浠诲姟鐭俊鍙戦�佸け璐�:绯荤粺閿欒", "5");
+                }
+            }
+
+        } else if (descByCode.equals("鍏紬鍙�")) {
+            log.info("銆恠fHandlle銆戝鐞嗗叕浼楀彿浠诲姟锛屼换鍔′俊鎭細{}", ivrTask1);
+            //鍏紬鍙�
+            RSAPublicKeyExample rsaPublicKeyExample = new RSAPublicKeyExample();
+            String taskId = rsaPublicKeyExample.encryptedData(ivrTask1.getTaskid().toString(), pub_key);
+            boolean dateToday = isDateToday(serviceSubtask.getVisitTime());
+            if (dateToday) {
+                try {
+                    String patid = rsaPublicKeyExample.encryptedData(serviceSubtask.getPatid().toString(), pub_key);
+                    String url = null;
+                    url = localIP + ":" + req_path + "/outsideChainwt?param1=" + taskId + "&param2=" + patid + "&param3=" + URLEncoder.encode(ivrTask1.getTaskName(), StandardCharsets.UTF_8.toString()) + "&param5=false";
+
+                    //鑾峰彇寰俊鍏紬鍙疯姹備俊鎭牴鎹満鏋処D
+                    List<String> wxqqxx = WxGZHEnum.getDescByCode(patArchive.getOrgid());
+                    if (CollectionUtils.isEmpty(wxqqxx) || wxqqxx.size() < 4) {
+                        setSuccessPreachForm(serviceSubtask, sendPreachform, "銆愬叕浼楀彿銆戣鏈烘瀯鐨勫叕浼楀彿閰嶇疆淇℃伅涓嶅叏锛屾棤娉曢�氳繃鍏紬鍙峰彂閫�", "4");
+                        return;
+                    }
+
+                    if (StringUtils.isEmpty(patArchive.getPatidHis())) {
+                        setSuccessPreachForm(serviceSubtask, sendPreachform, "銆愬叕浼楀彿銆戝叕浼楀彿鍙戦�佸け璐�,his绯荤粺鐨勬偅鑰卛d涓虹┖", "5");
+                        return;
+                    }
+                    String wxCode = getWXCode(serviceSubtask.getSfzh(), url, serviceSubtask.getTaskName(), serviceSubtask.getTaskDesc(), patArchive.getTelcode(), serviceSubtask.getSendname(), patArchive.getPatidHis(), wxqqxx);
+
+                    Map<String, Object> map = JSONObject.parseObject(wxCode, Map.class);
+                    //浠诲姟鍙戦�佽褰�
+                    ServiceSubtaskRecord serviceSubtaskRecord = new ServiceSubtaskRecord();
+                    serviceSubtaskRecord.setTaskid(serviceSubtask.getTaskid().toString());
+                    serviceSubtaskRecord.setUuid(UUID.randomUUID().toString());
+                    serviceSubtaskRecord.setTasktype(serviceSubtask.getType());
+                    serviceSubtaskRecord.setPreachform("4");
+                    serviceSubtaskRecord.setStartTime(System.currentTimeMillis());
+                    serviceSubtaskRecord.setResult("success");
+                    if (!map.isEmpty() && (Boolean) map.get("succ") == false) serviceSubtaskRecord.setResult("error");
+                    serviceSubtaskRecordService.insertServiceSubtaskRecord(serviceSubtaskRecord);
+
+                    //鍙戦�佸畬鎴愬悗锛屼慨鏀圭姸鎬�
+                    serviceSubtask.setSendstate(3L);
+                    if ((Boolean) map.get("succ") == true) {
+                        serviceSubtask.setResult("success");
+                        setSuccessPreachForm(serviceSubtask, sendPreachform, "銆愬叕浼楀彿銆戝叕浼楀彿鍙戦�佹垚鍔�", "2");
+                    } else {
+                        log.error("銆恠fHandlle銆戝叕浼楀彿鍙戦�佸け璐ワ紝鎮h�呬俊鎭細{}锛岄敊璇俊鎭細{}", serviceSubtask, map.get("msg"));
+                        setSuccessPreachForm(serviceSubtask, sendPreachform, "銆愬叕浼楀彿銆戝叕浼楀彿鍙戦�佸け璐�", "5");
+                    }
+                } catch (Exception e) {
+                    String guid = UUID.randomUUID().toString();
+                    log.error("銆恠fHandlle銆戦暱鏈熶换鍔″叕浼楀彿鍙戦�佸け璐ワ紝鍘熷洜锛歿}锛孏UID锛歿}", e.getMessage(), guid);
+                    setSuccessPreachForm(serviceSubtask, sendPreachform, "銆愬叕浼楀彿銆戦暱鏈熶换鍔″叕浼楀彿鍙戦�佸け璐ワ紝鍘熷洜锛�" + e.getMessage(), "5");
+                }
+            }
+        } else if (descByCode.equals("浜哄伐")) {
+            setSuccessPreachForm(serviceSubtask, sendPreachform, "浜哄伐寰呮墽琛�", "2");
+        }
+
     }
 
-    private String getKey() {
-        Map<String, String> map = new HashMap<>();
-        for (int i = 0; i < 6; i++) {
-            Boolean aBoolean = redisCache.hasKey("cache-" + i);
-            if (!aBoolean) {
-                redisCache.setCacheObject("cache-" + i, "");
-                map.put("cache-" + i, "");
-            } else {
-                map.put("cache-" + i, redisCache.getCacheObject("cache-" + i));
-            }
+
+    private Date getNextVisitTime(Long subid, Long taskid, Date visitTime) {
+        ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform();
+        serviceSubtaskPreachform.setSubid(subid);
+        serviceSubtaskPreachform.setTaskid(taskid);
+        List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
+        if (CollectionUtils.isNotEmpty(serviceSubtaskPreachforms)) {
+            String compensateTime = serviceSubtaskPreachforms.get(0).getCompensateTime();
+            int hoursToAdd = Integer.valueOf(compensateTime) * 24;
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTime(visitTime);
+            calendar.add(Calendar.HOUR_OF_DAY, hoursToAdd);
+            Date newDate = calendar.getTime();
+            return newDate;
+        }
+        return visitTime;
+    }
+
+    private String getSendPreachform(ServiceSubtaskPreachform serviceSubtaskPreachform, ServiceSubtask serviceSubtask) {
+        List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
+
+        // 鎯呭喌1锛歝urrentPreachform涓虹┖锛屽彇sort涓�1鐨刾reachform
+        if (StringUtils.isEmpty(serviceSubtask.getCurrentPreachform())) {
+            return serviceSubtaskPreachforms.stream().filter(item -> item.getSort() == 1L).map(ServiceSubtaskPreachform::getPreachform).findFirst().orElse(null);
         }
 
-        String key = null;
-        String value = "";
-        for (Map.Entry<String, String> entry : map.entrySet()) {
-            if (StringUtils.isEmpty(value)) {
-                value = entry.getValue();
-                key = entry.getKey();
-            } else {
-                if (entry.getValue().split(",").length < value.split(",").length) {
-                    value = entry.getValue();
-                    key = entry.getKey();
-                }
+        // 鎯呭喌2锛歝urrentPreachform涓嶄负绌猴紝鎵句笅涓�涓猻ort
+        Optional<Long> currentSort = serviceSubtaskPreachforms.stream().filter(item -> serviceSubtask.getCurrentPreachform().equals(item.getPreachform())).map(ServiceSubtaskPreachform::getSort).findFirst();
+
+        if (currentSort.isPresent()) {
+            // 妫�鏌ユ槸鍚︽墍鏈塻endstate涓嶇瓑浜�9
+            boolean allSendStateNot1AndNot9 = serviceSubtaskPreachforms.stream().allMatch(item -> !item.getSendstate().equals("9"));
+            if (!allSendStateNot1AndNot9) {
+                //璇存槑锛屽湪鏌愮鏂瑰紡鍙戦�佸け璐ュ悗锛屽張鎴愬姛浜嗭紙渚嬪鐭俊鎴栧叕浼楀彿锛屽湪瑙勫畾鏃堕棿澶栨偅鑰呭仛瀹屼簡锛岃繖涓椂鍊欙紝鐘舵�佹敼鎴愪簡9锛�
+                serviceSubtask.setSendstate(6L);
+                serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
+                return "-1";
             }
+
+            // 褰搒ort绛変簬鍒楄〃size鏃讹紝骞朵笖鎵�鏈塻endstate閮戒笉绛変簬9锛屽垯杩斿洖-1
+            if (currentSort.get().equals((long) serviceSubtaskPreachforms.size())) {
+                if (allSendStateNot1AndNot9) {
+                    //璇存槑鍏ㄥ彂閫佸け璐ヤ簡
+                    serviceSubtask.setSendstate(5L);
+                    serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
+                    //淇敼鍙戦�佺姸鎬�
+                    setFail(serviceSubtaskPreachforms, serviceSubtask);
+                }
+                return "-1";
+            }
+
+            // 褰搒ort绛変簬鍒楄〃size鏃讹紝涓嬩竴涓猻ort涓�-1
+            Long nextSort = currentSort.get() + 1;
+
+            //濡傛灉褰撳墠鐨勫彂閫佹柟寮忎笉涓虹┖锛屽苟涓斿紑濮嬪噯澶囪鐢ㄤ笅涓�绉嶆柟寮忓彂閫佷簡锛岄偅褰撳墠鐨勮偗瀹氭病鏈夊彂閫佹垚鍔燂紝闇�瑕佽缃け璐�
+            // (杩欓噷涓昏鏄紝浜哄伐濡傛灉娌℃湁闅忚锛岀劧鍚庡埌鍏紬鍙风殑鏃跺�欙紝灏变笉浼氬啀鍘荤浜哄伐鏄惁鎴愬姛锛屼汉宸ョ殑鐘舵�佷細涓�鐩村崱鍦�2鐨勭姸鎬佷笂)
+            if (StringUtils.isNotEmpty(serviceSubtask.getCurrentPreachform())) {
+                setFail(serviceSubtaskPreachforms, serviceSubtask);
+            }
+
+            // 鎵惧埌涓嬩竴涓猻ort瀵瑰簲鐨刾reachform
+            return serviceSubtaskPreachforms.stream().filter(item -> nextSort.equals(item.getSort())).map(ServiceSubtaskPreachform::getPreachform).findFirst().orElse("-1");
         }
-        return key;
+
+        return null;
     }
+
+    private Integer setFail(List<ServiceSubtaskPreachform> serviceSubtaskPreachforms, ServiceSubtask serviceSubtask) {
+        Optional<Long> id = serviceSubtaskPreachforms.stream().filter(item -> serviceSubtask.getCurrentPreachform().equals(item.getPreachform())).map(ServiceSubtaskPreachform::getId).findFirst();
+        if (id.isPresent()) {
+            ServiceSubtaskPreachform subtaskPreachform = new ServiceSubtaskPreachform();
+            subtaskPreachform.setSendstate("5");
+            subtaskPreachform.setId(id.get());
+            return serviceSubtaskPreachformMapper.updateServiceSubtaskPreachform(subtaskPreachform);
+        }
+        return 0;
+    }
+
 
     private String getDXCode(String address, String ShouJiHM, String FaSongNR, String FaSongRID, String FaSongRXM, Map<String, Object> headerMap, String token) {
         Map<String, Object> map = new LinkedHashMap<>();
@@ -800,4 +871,61 @@
             log.error("銆恉ealHisData銆慔IS鏁版嵁閲囬泦寮傚父", e);
         }
     }
+
+    public Boolean setSuccessPreachForm(ServiceSubtask serviceSubtask, String preachform, String remark, String failSendstate) {
+        if (preachform.equals("-1")) {
+            //璇存槑閮戒笉闇�瑕佹墽琛屼簡
+            ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform();
+            serviceSubtaskPreachform.setSubid(serviceSubtask.getId());
+            serviceSubtaskPreachform.setTaskid(serviceSubtask.getTaskid());
+            serviceSubtaskPreachform.setOrgid(serviceSubtask.getOrgid());
+            serviceSubtaskPreachform.setSendstate(failSendstate);
+            serviceSubtaskPreachformMapper.updateSSPByCondition(serviceSubtaskPreachform);
+            return true;
+        }
+
+
+        ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform();
+        serviceSubtaskPreachform.setSubid(serviceSubtask.getId());
+        serviceSubtaskPreachform.setTaskid(serviceSubtask.getTaskid());
+        serviceSubtaskPreachform.setOrgid(serviceSubtask.getOrgid());
+        List<ServiceSubtaskPreachform> sspCount = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
+
+        serviceSubtaskPreachform.setPreachform(preachform);
+        //1:鏈彂閫佺姸鎬�
+        serviceSubtaskPreachform.setSendstate("1");
+        //鐢佃瘽鐨勬湭鍙戦�佺姸鎬侊紝闇�瑕佹煡2锛屽洜涓猴紝鏁版嵁鍙兘鍗″湪闃熷垪閲屼簡; 锛堟病杩涢槦鍒楋紝鐢佃瘽鐘舵�佽繕鏄�1锛�
+        if (preachform.equals("3") && StringUtils.isNotEmpty(failSendstate) && Long.valueOf(failSendstate) > 2)
+            serviceSubtaskPreachform.setSendstate("2");
+        //浜哄伐鐨勬湭鍙戦�佺姸鎬侊紝闇�瑕佹煡2
+        if (preachform.equals("1") && StringUtils.isNotEmpty(failSendstate) && Long.valueOf(failSendstate) > 2)
+            serviceSubtaskPreachform.setSendstate("2");
+
+        List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
+        if (CollectionUtils.isNotEmpty(serviceSubtaskPreachforms)) {
+            ServiceSubtaskPreachform serviceSubtaskPreachform1 = serviceSubtaskPreachforms.get(0);
+            serviceSubtaskPreachform1.setSendstate(failSendstate);
+            serviceSubtaskPreachform1.setRemark(remark);
+            serviceSubtaskPreachformMapper.updateServiceSubtaskPreachform(serviceSubtaskPreachform1);
+
+            //濡傛灉褰撳墠鐨刾reachform宸茬粡鏄渶鍚庝竴涓簡锛岄偅鐩存帴灏唖erviceSubtask鐨剆endstate鐘舵�佹敼鎴�5灏辫浜�(鍏ㄥけ璐ヤ簡)
+            if (serviceSubtaskPreachform1.getSort() == sspCount.size()) {
+                if (failSendstate.equals("4") || failSendstate.equals("5")) {
+                    serviceSubtask.setCurrentPreachform(preachform);
+                    serviceSubtask.setSendstate(5L);
+                    serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
+                    return true;
+                }
+            }
+        } else {
+            log.error("銆愬畾鏃朵换鍔′腑璇ユ偅鑰呮病鏈夋煡璇㈠埌灞炰簬浠栫殑鍙戦�佹柟寮忥紝subid锛歿},prechform:{},orgid:{}銆�", serviceSubtask.getId(), preachform, serviceSubtask.getOrgid());
+            return false;
+        }
+        //灏嗕笅涓�娆$殑闅忚鏃堕棿涓庡綋鍓嶆墽琛屾柟寮忚褰曚竴涓�
+        serviceSubtask.setVisitTime(getNextVisitTime(serviceSubtask.getId(), serviceSubtask.getTaskid(), serviceSubtask.getVisitTime()));
+        serviceSubtask.setCurrentPreachform(preachform);
+        serviceSubtask.setSendstate(3L);
+        serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
+        return true;
+    }
 }
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 0468434..96c1d92 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
@@ -5,14 +5,14 @@
 
 /**
  * 鍙傛暟閰嶇疆 鏈嶅姟灞�
- * 
+ *
  * @author ruoyi
  */
 public interface ISysConfigService
 {
     /**
      * 鏌ヨ鍙傛暟閰嶇疆淇℃伅
-     * 
+     *
      * @param configId 鍙傛暟閰嶇疆ID
      * @return 鍙傛暟閰嶇疆淇℃伅
      */
@@ -20,30 +20,24 @@
 
     /**
      * 鏍规嵁閿悕鏌ヨ鍙傛暟閰嶇疆淇℃伅
-     * 
+     *
      * @param configKey 鍙傛暟閿悕
      * @return 鍙傛暟閿��
      */
     public String selectConfigByKey(String configKey);
 
     /**
-     * 鏍规嵁閿悕鏌ヨ鍙傛暟閰嶇疆淇℃伅
-     *
-     * @param configKey 鍙傛暟閿悕
-     * @return 鍙傛暟閿��
-     */
-    public String selectConfigByKey(String configKey,String orgid);
-
-    /**
      * 鑾峰彇楠岃瘉鐮佸紑鍏�
-     * 
+     *
      * @return true寮�鍚紝false鍏抽棴
      */
     public boolean selectCaptchaEnabled();
 
+    public String selectConfigByKey(String configKey,String orgid);
+
     /**
      * 鏌ヨ鍙傛暟閰嶇疆鍒楄〃
-     * 
+     *
      * @param config 鍙傛暟閰嶇疆淇℃伅
      * @return 鍙傛暟閰嶇疆闆嗗悎
      */
@@ -51,7 +45,7 @@
 
     /**
      * 鏂板鍙傛暟閰嶇疆
-     * 
+     *
      * @param config 鍙傛暟閰嶇疆淇℃伅
      * @return 缁撴灉
      */
@@ -59,7 +53,7 @@
 
     /**
      * 淇敼鍙傛暟閰嶇疆
-     * 
+     *
      * @param config 鍙傛暟閰嶇疆淇℃伅
      * @return 缁撴灉
      */
@@ -67,7 +61,7 @@
 
     /**
      * 鎵归噺鍒犻櫎鍙傛暟淇℃伅
-     * 
+     *
      * @param configIds 闇�瑕佸垹闄ょ殑鍙傛暟ID
      */
     public void deleteConfigByIds(Long[] configIds);
@@ -89,7 +83,7 @@
 
     /**
      * 鏍¢獙鍙傛暟閿悕鏄惁鍞竴
-     * 
+     *
      * @param config 鍙傛暟淇℃伅
      * @return 缁撴灉
      */
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 b95d21a..bb0db11 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
@@ -48,7 +48,6 @@
 
     @Autowired
     private ISysConfigService configService;
-
     /**
      * 鏌ヨ鐭俊璁板綍
      *
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java
index f03e493..a429707 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java
@@ -19,7 +19,7 @@
 
 /**
  * 鍙傛暟閰嶇疆 鏈嶅姟灞傚疄鐜�
- * 
+ *
  * @author ruoyi
  */
 @Service
@@ -42,7 +42,7 @@
 
     /**
      * 鏌ヨ鍙傛暟閰嶇疆淇℃伅
-     * 
+     *
      * @param configId 鍙傛暟閰嶇疆ID
      * @return 鍙傛暟閰嶇疆淇℃伅
      */
@@ -57,7 +57,7 @@
 
     /**
      * 鏍规嵁閿悕鏌ヨ鍙傛暟閰嶇疆淇℃伅
-     * 
+     *
      * @param configKey 鍙傛暟key
      * @return 鍙傛暟閿��
      */
@@ -81,6 +81,22 @@
     }
 
     /**
+     * 鑾峰彇楠岃瘉鐮佸紑鍏�
+     *
+     * @return true寮�鍚紝false鍏抽棴
+     */
+    @Override
+    public boolean selectCaptchaEnabled()
+    {
+        String captchaEnabled = selectConfigByKey("sys.account.captchaEnabled");
+        if (StringUtils.isEmpty(captchaEnabled))
+        {
+            return true;
+        }
+        return Convert.toBool(captchaEnabled);
+    }
+
+    /**
      * 鏍规嵁閿悕鏌ヨ鍙傛暟閰嶇疆淇℃伅
      *
      * @param configKey 鍙傛暟key
@@ -100,26 +116,9 @@
         }
         return StringUtils.EMPTY;
     }
-
-    /**
-     * 鑾峰彇楠岃瘉鐮佸紑鍏�
-     * 
-     * @return true寮�鍚紝false鍏抽棴
-     */
-    @Override
-    public boolean selectCaptchaEnabled()
-    {
-        String captchaEnabled = selectConfigByKey("sys.account.captchaEnabled");
-        if (StringUtils.isEmpty(captchaEnabled))
-        {
-            return true;
-        }
-        return Convert.toBool(captchaEnabled);
-    }
-
     /**
      * 鏌ヨ鍙傛暟閰嶇疆鍒楄〃
-     * 
+     *
      * @param config 鍙傛暟閰嶇疆淇℃伅
      * @return 鍙傛暟閰嶇疆闆嗗悎
      */
@@ -131,7 +130,7 @@
 
     /**
      * 鏂板鍙傛暟閰嶇疆
-     * 
+     *
      * @param config 鍙傛暟閰嶇疆淇℃伅
      * @return 缁撴灉
      */
@@ -148,7 +147,7 @@
 
     /**
      * 淇敼鍙傛暟閰嶇疆
-     * 
+     *
      * @param config 鍙傛暟閰嶇疆淇℃伅
      * @return 缁撴灉
      */
@@ -171,7 +170,7 @@
 
     /**
      * 鎵归噺鍒犻櫎鍙傛暟淇℃伅
-     * 
+     *
      * @param configIds 闇�瑕佸垹闄ょ殑鍙傛暟ID
      */
     @Override
@@ -224,7 +223,7 @@
 
     /**
      * 鏍¢獙鍙傛暟閿悕鏄惁鍞竴
-     * 
+     *
      * @param config 鍙傛暟閰嶇疆淇℃伅
      * @return 缁撴灉
      */
@@ -242,7 +241,7 @@
 
     /**
      * 璁剧疆cache key
-     * 
+     *
      * @param configKey 鍙傛暟閿�
      * @return 缂撳瓨閿甼ey
      */
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 323dd8c..ca34c52 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
@@ -272,7 +272,11 @@
     @Override
     public SysUser selectUserByUserNameAndDeptId(String userName) {
         String[] split = userName.split("&");
+        if (split[2].contains("null")) {
+            split[2] = null;
+        }
         SysUser sysUser = userMapper.selectUserByUserNameByCondition(split[0], split[1], split[2]);
+        log.info("selectUserByUserNameAndDeptId鐨剆ysUser鐨勫�间负锛歿}", sysUser);
         if (Objects.isNull(sysUser)) return sysUser;
         List<SysDept> sysDepts = null;
         if (StringUtils.isNotEmpty(split[0]) && split[0].equals("admin")) {
@@ -512,15 +516,66 @@
         // 鏂板鐢ㄦ埛淇℃伅
         int rows = userMapper.insertUser(user);
         //鏂板鐢ㄦ埛涓庨儴闂ㄥ叧鑱�
-        if (!CollectionUtils.isEmpty(user.getDepts())) {
-            for (Long deptId : user.getDepts()) {
-                SysUserDept sysUserDep = new SysUserDept();
-                sysUserDep.setUserId(user.getUserId());
-                sysUserDep.setDeptId(deptId);
-                sysUserDep.setCreateTime(new Date());
-                sysUserDep.setUpdateTime(new Date());
-                sysUserDep.setOrgid(user.getOrgid());
-                sysUserDeptMapper.insertSysUserDept(sysUserDep);
+//        if (!CollectionUtils.isEmpty(user.getDepts())) {
+//            for (Long deptId : user.getDepts()) {
+//                SysUserDept sysUserDep = new SysUserDept();
+//                sysUserDep.setUserId(user.getUserId());
+//                sysUserDep.setDeptId(deptId);
+//                sysUserDep.setCreateTime(new Date());
+//                sysUserDep.setUpdateTime(new Date());
+//                sysUserDep.setOrgid(user.getOrgid());
+//                sysUserDeptMapper.insertSysUserDept(sysUserDep);
+//            }
+//        }
+        if (!CollectionUtils.isEmpty(user.getDeptCodes())) {
+            for (String deptCode : user.getDeptCodes()) {
+                SysDept sysDept = sysDeptMapper.selectDeptByCode(deptCode);
+                if (ObjectUtils.isEmpty(sysDept)) {
+                    continue;
+                }
+
+                SysUserDept sysUserDept = new SysUserDept();
+                sysUserDept.setUserId(user.getUserId());
+                sysUserDept.setOrgid(user.getOrgid());
+                sysUserDept.setDeptCode(deptCode);
+                sysUserDept.setDeptId(sysDept.getDeptId());
+                List<SysUserDept> sysUserDepts = sysUserDeptMapper.selectSysUserDeptList(sysUserDept);
+                sysUserDept.setDelFlag(0L);
+                sysUserDept.setDeptType("1");
+                sysUserDept.setDeptName(sysDept.getDeptName());
+                sysUserDept.setUpdateTime(new Date());
+                if (!CollectionUtils.isEmpty(sysUserDepts)) {
+                    sysUserDept.setId(sysUserDepts.get(0).getId());
+                    sysUserDeptMapper.updateSysUserDept(sysUserDept);
+                    continue;
+                }
+                sysUserDept.setCreateTime(new Date());
+                sysUserDeptMapper.insertSysUserDept(sysUserDept);
+            }
+        }
+        if (!CollectionUtils.isEmpty(user.getWardCodes())) {
+            for (String wardCode : user.getWardCodes()) {
+                SysDept sysDept = sysDeptMapper.selectDeptByCode(wardCode);
+                if (ObjectUtils.isEmpty(sysDept)) {
+                    continue;
+                }
+                SysUserDept sysUserDept = new SysUserDept();
+                sysUserDept.setUserId(user.getUserId());
+                sysUserDept.setDeptCode(wardCode);
+                sysUserDept.setDeptId(sysDept.getDeptId());
+                sysUserDept.setOrgid(user.getOrgid());
+                List<SysUserDept> sysUserDepts = sysUserDeptMapper.selectSysUserDeptList(sysUserDept);
+                sysUserDept.setDelFlag(0L);
+                sysUserDept.setDeptType("2");
+                sysUserDept.setOrgid(user.getOrgid());
+                sysUserDept.setDeptName(sysDept.getDeptName());
+                sysUserDept.setUpdateTime(new Date());
+                if (!CollectionUtils.isEmpty(sysUserDepts)) {
+                    sysUserDeptMapper.updateSysUserDept(sysUserDept);
+                    continue;
+                }
+                sysUserDept.setCreateTime(new Date());
+                sysUserDeptMapper.insertSysUserDept(sysUserDept);
             }
         }
         // 鏂板鐢ㄦ埛宀椾綅鍏宠仈
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml
index 78f092b..0c5b29a 100644
--- a/ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml
@@ -43,9 +43,6 @@
             <if test="configKey !=null and configKey != ''">
                 and config_key = #{configKey}
             </if>
-            <if test="orgid !=null and orgid != ''">
-                and orgid = #{orgid}
-            </if>
         </where>
     </sql>
 
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
index f975fe8..3b91c20 100644
--- a/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
@@ -250,7 +250,7 @@
 
     <delete id="deleteDeptById" parameterType="Long">
         update sys_dept
-        set del_flag = '2'
+        set del_flag = '1'
         where dept_id = #{deptId}
     </delete>
 
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml
index 664ae65..288be10 100644
--- a/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml
@@ -1,160 +1,176 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.system.mapper.SysRoleMapper">
 
-	<resultMap type="SysRole" id="SysRoleResult">
-		<id     property="roleId"             column="role_id"               />
-		<result property="roleName"           column="role_name"             />
-		<result property="roleKey"            column="role_key"              />
-		<result property="roleSort"           column="role_sort"             />
-		<result property="dataScope"          column="data_scope"            />
-		<result property="menuCheckStrictly"  column="menu_check_strictly"   />
-		<result property="deptCheckStrictly"  column="dept_check_strictly"   />
-		<result property="status"             column="status"                />
-		<result property="delFlag"            column="del_flag"              />
-		<result property="createBy"           column="create_by"             />
-		<result property="createTime"         column="create_time"           />
-		<result property="updateBy"           column="update_by"             />
-		<result property="updateTime"         column="update_time"           />
-		<result property="remark"             column="remark"                />
-		<result property="guid"             column="guid"                />
-		<result property="orgid"             column="orgid"                />
-	</resultMap>
+    <resultMap type="SysRole" id="SysRoleResult">
+        <id property="roleId" column="role_id"/>
+        <result property="roleName" column="role_name"/>
+        <result property="roleKey" column="role_key"/>
+        <result property="roleSort" column="role_sort"/>
+        <result property="dataScope" column="data_scope"/>
+        <result property="menuCheckStrictly" column="menu_check_strictly"/>
+        <result property="deptCheckStrictly" column="dept_check_strictly"/>
+        <result property="status" column="status"/>
+        <result property="delFlag" column="del_flag"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="remark" column="remark"/>
+        <result property="guid" column="guid"/>
+        <result property="orgid" column="orgid"/>
+    </resultMap>
 
-	<sql id="selectRoleVo">
-	    select distinct r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.menu_check_strictly, r.dept_check_strictly,
-            r.status, r.del_flag, r.create_time, r.remark , r.guid, r.orgid
+    <sql id="selectRoleVo">
+        select distinct r.role_id,
+                        r.role_name,
+                        r.role_key,
+                        r.role_sort,
+                        r.data_scope,
+                        r.menu_check_strictly,
+                        r.dept_check_strictly,
+                        r.status,
+                        r.del_flag,
+                        r.create_time,
+                        r.remark,
+                        r.guid,
+                        r.orgid
         from sys_role r
-	        left join sys_user_role ur on ur.role_id = r.role_id
-	        left join sys_user u on u.user_id = ur.user_id
-	        left join sys_dept d on u.dept_id = d.dept_id
+                 left join sys_user_role ur on ur.role_id = r.role_id
+                 left join sys_user u on u.user_id = ur.user_id
+                 left join sys_dept d on u.dept_id = d.dept_id
     </sql>
 
     <select id="selectRoleList" parameterType="SysRole" resultMap="SysRoleResult">
-		<include refid="selectRoleVo"/>
-		where r.del_flag = '0'
-		<if test="roleId != null and roleId != 0">
-			AND r.role_id = #{roleId}
-		</if>
-		<if test="roleName != null and roleName != ''">
-			AND r.role_name like concat('%', #{roleName}, '%')
-		</if>
-		<if test="status != null and status != ''">
-			AND r.status = #{status}
-		</if>
-		<if test="roleKey != null and roleKey != ''">
-			AND r.role_key like concat('%', #{roleKey}, '%')
-		</if>
-		<if test="params.beginTime != null and params.beginTime != ''"><!-- 寮�濮嬫椂闂存绱� -->
-			and date_format(r.create_time,'%y%m%d') &gt;= date_format(#{params.beginTime},'%y%m%d')
-		</if>
-		<if test="params.endTime != null and params.endTime != ''"><!-- 缁撴潫鏃堕棿妫�绱� -->
-			and date_format(r.create_time,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')
-		</if>
-		<!-- 鏁版嵁鑼冨洿杩囨护 -->
-		${params.dataScope}
-		order by r.role_sort
-	</select>
+        <include refid="selectRoleVo"/>
+        where r.del_flag = '0'
+        <if test="roleId != null and roleId != 0">
+            AND r.role_id = #{roleId}
+        </if>
+        <if test="roleName != null and roleName != ''">
+            AND r.role_name like concat('%', #{roleName}, '%')
+        </if>
+        <if test="status != null and status != ''">
+            AND r.status = #{status}
+        </if>
+        <if test="orgid != null and orgid != ''">
+            AND r.orgid = #{orgid}
+        </if>
+        <if test="roleKey != null and roleKey != ''">
+            AND r.role_key like concat('%', #{roleKey}, '%')
+        </if>
+        <if test="params.beginTime != null and params.beginTime != ''"><!-- 寮�濮嬫椂闂存绱� -->
+            and date_format(r.create_time,'%y%m%d') &gt;= date_format(#{params.beginTime},'%y%m%d')
+        </if>
+        <if test="params.endTime != null and params.endTime != ''"><!-- 缁撴潫鏃堕棿妫�绱� -->
+            and date_format(r.create_time,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')
+        </if>
+        <!-- 鏁版嵁鑼冨洿杩囨护 -->
+        ${params.dataScope}
+        order by r.role_sort
+    </select>
 
-	<select id="selectRolePermissionByUserId" parameterType="Long" resultMap="SysRoleResult">
-		<include refid="selectRoleVo"/>
-		WHERE r.del_flag = '0' and ur.user_id = #{userId}
-	</select>
+    <select id="selectRolePermissionByUserId" parameterType="Long" resultMap="SysRoleResult">
+        <include refid="selectRoleVo"/>
+        WHERE r.del_flag = '0' and ur.user_id = #{userId}
+    </select>
 
-	<select id="selectRoleAll" resultMap="SysRoleResult">
-		<include refid="selectRoleVo"/>
-	</select>
+    <select id="selectRoleAll" resultMap="SysRoleResult">
+        <include refid="selectRoleVo"/>
+    </select>
 
-	<select id="selectRoleListByUserId" parameterType="Long" resultType="Long">
-		select r.role_id
+    <select id="selectRoleListByUserId" parameterType="Long" resultType="Long">
+        select r.role_id
         from sys_role r
-	        left join sys_user_role ur on ur.role_id = r.role_id
-	        left join sys_user u on u.user_id = ur.user_id
-	    where u.user_id = #{userId}
-	</select>
+                 left join sys_user_role ur on ur.role_id = r.role_id
+                 left join sys_user u on u.user_id = ur.user_id
+        where u.user_id = #{userId}
+    </select>
 
-	<select id="selectRoleById" parameterType="Long" resultMap="SysRoleResult">
-		<include refid="selectRoleVo"/>
-		where r.role_id = #{roleId}
-	</select>
+    <select id="selectRoleById" parameterType="Long" resultMap="SysRoleResult">
+        <include refid="selectRoleVo"/>
+        where r.role_id = #{roleId}
+    </select>
 
-	<select id="selectRolesByUserName" parameterType="String" resultMap="SysRoleResult">
-		<include refid="selectRoleVo"/>
-		WHERE r.del_flag = '0' and u.user_name = #{userName}
-	</select>
+    <select id="selectRolesByUserName" parameterType="String" resultMap="SysRoleResult">
+        <include refid="selectRoleVo"/>
+        WHERE r.del_flag = '0' and u.user_name = #{userName}
+    </select>
 
-	<select id="checkRoleNameUnique" parameterType="String" resultMap="SysRoleResult">
-		<include refid="selectRoleVo"/>
-		 where r.role_name=#{roleName} and r.del_flag = '0' limit 1
-	</select>
+    <select id="checkRoleNameUnique" parameterType="String" resultMap="SysRoleResult">
+        <include refid="selectRoleVo"/>
+        where r.role_name=#{roleName} and r.del_flag = '0' limit 1
+    </select>
 
-	<select id="checkRoleKeyUnique" parameterType="String" resultMap="SysRoleResult">
-		<include refid="selectRoleVo"/>
-		 where r.role_key=#{roleKey} and r.del_flag = '0' limit 1
-	</select>
+    <select id="checkRoleKeyUnique" parameterType="String" resultMap="SysRoleResult">
+        <include refid="selectRoleVo"/>
+        where r.role_key=#{roleKey} and r.del_flag = '0' limit 1
+    </select>
 
- 	<insert id="insertRole" parameterType="SysRole" useGeneratedKeys="true" keyProperty="roleId">
- 		insert into sys_role(
- 			<if test="roleId != null and roleId != 0">role_id,</if>
- 			<if test="roleName != null and roleName != ''">role_name,</if>
- 			<if test="roleKey != null and roleKey != ''">role_key,</if>
- 			<if test="roleSort != null">role_sort,</if>
- 			<if test="dataScope != null and dataScope != ''">data_scope,</if>
- 			<if test="menuCheckStrictly != null">menu_check_strictly,</if>
- 			<if test="deptCheckStrictly != null">dept_check_strictly,</if>
- 			<if test="status != null and status != ''">status,</if>
- 			<if test="remark != null and remark != ''">remark,</if>
- 			<if test="createBy != null and createBy != ''">create_by,</if>
- 			<if test="guid != null and guid != ''">guid,</if>
- 			<if test="orgid != null and orgid != ''">orgid,</if>
- 			create_time
- 		)values(
- 			<if test="roleId != null and roleId != 0">#{roleId},</if>
- 			<if test="roleName != null and roleName != ''">#{roleName},</if>
- 			<if test="roleKey != null and roleKey != ''">#{roleKey},</if>
- 			<if test="roleSort != null">#{roleSort},</if>
- 			<if test="dataScope != null and dataScope != ''">#{dataScope},</if>
- 			<if test="menuCheckStrictly != null">#{menuCheckStrictly},</if>
- 			<if test="deptCheckStrictly != null">#{deptCheckStrictly},</if>
- 			<if test="status != null and status != ''">#{status},</if>
- 			<if test="remark != null and remark != ''">#{remark},</if>
- 			<if test="createBy != null and createBy != ''">#{createBy},</if>
- 			<if test="guid != null and guid != ''">#{guid},</if>
- 			<if test="orgid != null and orgid != ''">#{orgid},</if>
- 			sysdate()
- 		)
-	</insert>
+    <insert id="insertRole" parameterType="SysRole" useGeneratedKeys="true" keyProperty="roleId">
+        insert into sys_role(
+        <if test="roleId != null and roleId != 0">role_id,</if>
+        <if test="roleName != null and roleName != ''">role_name,</if>
+        <if test="roleKey != null and roleKey != ''">role_key,</if>
+        <if test="roleSort != null">role_sort,</if>
+        <if test="dataScope != null and dataScope != ''">data_scope,</if>
+        <if test="menuCheckStrictly != null">menu_check_strictly,</if>
+        <if test="deptCheckStrictly != null">dept_check_strictly,</if>
+        <if test="status != null and status != ''">status,</if>
+        <if test="remark != null and remark != ''">remark,</if>
+        <if test="createBy != null and createBy != ''">create_by,</if>
+        <if test="guid != null and guid != ''">guid,</if>
+        <if test="orgid != null and orgid != ''">orgid,</if>
+        create_time
+        )values(
+        <if test="roleId != null and roleId != 0">#{roleId},</if>
+        <if test="roleName != null and roleName != ''">#{roleName},</if>
+        <if test="roleKey != null and roleKey != ''">#{roleKey},</if>
+        <if test="roleSort != null">#{roleSort},</if>
+        <if test="dataScope != null and dataScope != ''">#{dataScope},</if>
+        <if test="menuCheckStrictly != null">#{menuCheckStrictly},</if>
+        <if test="deptCheckStrictly != null">#{deptCheckStrictly},</if>
+        <if test="status != null and status != ''">#{status},</if>
+        <if test="remark != null and remark != ''">#{remark},</if>
+        <if test="createBy != null and createBy != ''">#{createBy},</if>
+        <if test="guid != null and guid != ''">#{guid},</if>
+        <if test="orgid != null and orgid != ''">#{orgid},</if>
+        sysdate()
+        )
+    </insert>
 
-	<update id="updateRole" parameterType="SysRole">
- 		update sys_role
- 		<set>
- 			<if test="roleName != null and roleName != ''">role_name = #{roleName},</if>
- 			<if test="roleKey != null and roleKey != ''">role_key = #{roleKey},</if>
- 			<if test="roleSort != null">role_sort = #{roleSort},</if>
- 			<if test="dataScope != null and dataScope != ''">data_scope = #{dataScope},</if>
- 			<if test="menuCheckStrictly != null">menu_check_strictly = #{menuCheckStrictly},</if>
- 			<if test="deptCheckStrictly != null">dept_check_strictly = #{deptCheckStrictly},</if>
- 			<if test="status != null and status != ''">status = #{status},</if>
- 			<if test="remark != null">remark = #{remark},</if>
- 			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
- 			<if test="guid != null and guid != ''">guid = #{guid},</if>
- 			<if test="orgid != null and orgid != ''">orgid = #{orgid},</if>
- 			update_time = sysdate()
- 		</set>
- 		where role_id = #{roleId}
-	</update>
+    <update id="updateRole" parameterType="SysRole">
+        update sys_role
+        <set>
+            <if test="roleName != null and roleName != ''">role_name = #{roleName},</if>
+            <if test="roleKey != null and roleKey != ''">role_key = #{roleKey},</if>
+            <if test="roleSort != null">role_sort = #{roleSort},</if>
+            <if test="dataScope != null and dataScope != ''">data_scope = #{dataScope},</if>
+            <if test="menuCheckStrictly != null">menu_check_strictly = #{menuCheckStrictly},</if>
+            <if test="deptCheckStrictly != null">dept_check_strictly = #{deptCheckStrictly},</if>
+            <if test="status != null and status != ''">status = #{status},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
+            <if test="guid != null and guid != ''">guid = #{guid},</if>
+            <if test="orgid != null and orgid != ''">orgid = #{orgid},</if>
+            update_time = sysdate()
+        </set>
+        where role_id = #{roleId}
+    </update>
 
-	<delete id="deleteRoleById" parameterType="Long">
- 		update sys_role set del_flag = '2' where role_id = #{roleId}
- 	</delete>
+    <delete id="deleteRoleById" parameterType="Long">
+        update sys_role
+        set del_flag = '1'
+        where role_id = #{roleId}
+    </delete>
 
- 	<delete id="deleteRoleByIds" parameterType="Long">
- 	    update sys_role set del_flag = '2' where role_id in
- 		<foreach collection="array" item="roleId" open="(" separator="," close=")">
- 			#{roleId}
+    <delete id="deleteRoleByIds" parameterType="Long">
+        update sys_role set del_flag = '1' where role_id in
+        <foreach collection="array" item="roleId" open="(" separator="," close=")">
+            #{roleId}
         </foreach>
- 	</delete>
+    </delete>
 
 </mapper>
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
index d975b62..5be683e 100644
--- a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -119,9 +119,9 @@
         u.birthday,
         u.job_phone,
         u.phonenumber, u.sex, u.status,
-        u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader from sys_user
+        u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name from sys_user
         u
-        left join sys_dept d on u.dept_id = d.dept_id
+        left join sys_user_dept d on u.user_id = d.user_id
         where u.del_flag = '0'
         <if test="userId != null">
             AND u.user_id = #{userId}
@@ -401,12 +401,12 @@
 
     <delete id="deleteUserById" parameterType="Long">
         update sys_user
-        set del_flag = '2'
+        set del_flag = '1'
         where user_id = #{userId}
     </delete>
 
     <delete id="deleteUserByIds" parameterType="Long">
-        update sys_user set del_flag = '2' where user_id in
+        update sys_user set del_flag = '1' where user_id in
         <foreach collection="array" item="userId" open="(" separator="," close=")">
             #{userId}
         </foreach>
diff --git a/smartor/src/main/java/com/smartor/common/LSHospTokenUtil.java b/smartor/src/main/java/com/smartor/common/LSHospTokenUtil.java
index dd164bc..b916078 100644
--- a/smartor/src/main/java/com/smartor/common/LSHospTokenUtil.java
+++ b/smartor/src/main/java/com/smartor/common/LSHospTokenUtil.java
@@ -7,17 +7,18 @@
 
 @Slf4j
 public class LSHospTokenUtil {
-     public static String getToken(String orgid,String url) {
+    public static String getToken(String orgid,String url) {
         String token = null;
         LyraTokenUtil lyraTokenUtil = null;
-            if (orgid.equals("47255004333112711A1001")) { //鏅畞
+        if(ObjectUtils.isNotEmpty(url)){
+            lyraTokenUtil = LyraTokenUtil.createLyraTokenUtil(url, "zjhes.suifangxt", "OIjdJvx2ALjFVGZoCZO4I8O");
+            log.info("token.360璋冪敤缁撴灉"+url+";鏈烘瀯浠g爜锛�"+orgid+"");
+        }else {
+            if (orgid.equals("47255004333112711A1001"))  //鏅畞
                 lyraTokenUtil = LyraTokenUtil.createLyraTokenUtil("https://9.0.124.104:13021/mediinfo-lyra-authserver/connect/token", "zjhes.suifangxt", "OIjdJvx2ALjFVGZoCZO4I8O");
-            }else  if (orgid.equals("47231022633110211A2101")) {  //涓尰闄�
+            if (orgid.equals("47231022633110211A2101"))  //涓尰闄�
                 lyraTokenUtil = LyraTokenUtil.createLyraTokenUtil("https://9.0.124.104:13011/mediinfo-lyra-authserver/connect/token", "zjhes.suifangxt", "OIjdJvx2ALjFVGZoCZO4I8O");
-            }else if(ObjectUtils.isNotEmpty(url)) {
-                lyraTokenUtil = LyraTokenUtil.createLyraTokenUtil(url, "zjhes.suifangxt", "OIjdJvx2ALjFVGZoCZO4I8O");
-                log.info("token.360璋冪敤缁撴灉" + url + ";鏈烘瀯浠g爜锛�" + orgid + "");
-            }
+        }
         try {
             token = lyraTokenUtil.getToken();
         } catch (IOException e) {
diff --git a/smartor/src/main/java/com/smartor/domain/IvrLibaTargetVO.java b/smartor/src/main/java/com/smartor/domain/IvrLibaTargetVO.java
index 7144702..e923ff8 100644
--- a/smartor/src/main/java/com/smartor/domain/IvrLibaTargetVO.java
+++ b/smartor/src/main/java/com/smartor/domain/IvrLibaTargetVO.java
@@ -90,8 +90,8 @@
     /**
      * 鏄惁寮傚父鏍囪瘑
      */
-    @Excel(name = "鏄惁寮傚父鏍囪瘑")
-    @ApiModelProperty(value = "鏄惁寮傚父鏍囪瘑")
+    @Excel(name = "鏄惁寮傚父鏍囪瘑  0缁胯壊锛�1绾㈣壊锛�2榛勮壊锛�")
+    @ApiModelProperty(value = "鏄惁寮傚父鏍囪瘑   0缁胯壊锛�1绾㈣壊锛�2榛勮壊锛�")
     private Long isabnormal;
 
     /**
diff --git a/smartor/src/main/java/com/smartor/domain/IvrTaskTemplateScriptVO.java b/smartor/src/main/java/com/smartor/domain/IvrTaskTemplateScriptVO.java
index 26cda95..3f81852 100644
--- a/smartor/src/main/java/com/smartor/domain/IvrTaskTemplateScriptVO.java
+++ b/smartor/src/main/java/com/smartor/domain/IvrTaskTemplateScriptVO.java
@@ -320,6 +320,12 @@
     private Integer sort;
 
     /**
+     * 寮傚父棰勮锛�0缁胯壊锛�1绾㈣壊锛�2榛勮壊
+     */
+    @ApiModelProperty(value = "寮傚父棰勮锛�0缁胯壊锛�1绾㈣壊锛�2榛勮壊")
+    private Long isabnormal;
+
+    /**
      * 璇濇湳閫夐」
      */
     @ApiModelProperty(value = "璇濇湳閫夐」")
diff --git a/smartor/src/main/java/com/smartor/domain/PatArchiveReq.java b/smartor/src/main/java/com/smartor/domain/PatArchiveReq.java
index b9eed5b..d4cd505 100644
--- a/smartor/src/main/java/com/smartor/domain/PatArchiveReq.java
+++ b/smartor/src/main/java/com/smartor/domain/PatArchiveReq.java
@@ -112,7 +112,7 @@
 
 
     /**
-     * 鏌ョ湅鍏ㄩ儴  0   鏌ョ湅浣忛櫌  1  鏌ョ湅闂ㄨ瘖  2   鏌ョ湅浣撴  3   鏌ョ湅鍑洪櫌 4
+     * 鏌ョ湅鍏ㄩ儴  0   鏌ョ湅鍑洪櫌  1  鏌ョ湅闂ㄨ瘖  2   鏌ョ湅浣撴  3   鏌ョ湅鍦ㄩ櫌 4
      */
     @ApiModelProperty(value = " 鏌ョ湅浣忛櫌  1  鏌ョ湅闂ㄨ瘖  2   鏌ョ湅浣撴  3   鏌ョ湅鍑洪櫌 4")
     private Long allhosp;
diff --git a/smartor/src/main/java/com/smartor/domain/PatMedInhospVO.java b/smartor/src/main/java/com/smartor/domain/PatMedInhospVO.java
index c29bf85..8d37b1a 100644
--- a/smartor/src/main/java/com/smartor/domain/PatMedInhospVO.java
+++ b/smartor/src/main/java/com/smartor/domain/PatMedInhospVO.java
@@ -34,6 +34,29 @@
     private String inhospno;
 
     /**
+     * 闅忚鏍囪瘑锛�0涓嶉渶瑕侊紝1闇�瑕�
+     */
+    @ApiModelProperty(value = "闅忚鏍囪瘑锛�0涓嶉渶瑕侊紝1闇�瑕�")
+    private String fuflag;
+    /**
+     * 鐤剧梾澶勭悊锛�0鏈鐞�   1澶勭悊鎴愬姛   2澶勭悊澶辫触
+     */
+    @ApiModelProperty(value = "鐤剧梾澶勭悊锛�0鏈鐞�   1澶勭悊鎴愬姛   2澶勭悊澶辫触")
+    private String diagcheckFlag;
+
+    /**
+     *鐥呭尯澶勭悊锛�0鏈鐞�   1澶勭悊鎴愬姛   2澶勭悊澶辫触
+     */
+    @ApiModelProperty(value = "鐥呭尯澶勭悊锛�0鏈鐞�   1澶勭悊鎴愬姛   2澶勭悊澶辫触")
+    private String wardcheckFlag;
+
+    /**
+     * 閮ㄩ棬澶勭悊锛�0鏈鐞�   1澶勭悊鎴愬姛   2澶勭悊澶辫触
+     */
+    @ApiModelProperty(value = "閮ㄩ棬澶勭悊锛�0鏈鐞�   1澶勭悊鎴愬姛   2澶勭悊澶辫触")
+    private String deptcheckFlag;
+
+    /**
      * 鎶ゅ+ID
      */
     @ApiModelProperty(value = "鎶ゅ+ID")
diff --git a/smartor/src/main/java/com/smartor/domain/PatMedOuthosp.java b/smartor/src/main/java/com/smartor/domain/PatMedOuthosp.java
index 0ed79a0..9aa0cc8 100644
--- a/smartor/src/main/java/com/smartor/domain/PatMedOuthosp.java
+++ b/smartor/src/main/java/com/smartor/domain/PatMedOuthosp.java
@@ -8,6 +8,7 @@
 import lombok.Data;
 
 import java.util.Date;
+import java.util.List;
 
 /**
  * 鎮h�呴棬璇婅褰曞璞� pat_med_outhosp
@@ -82,6 +83,12 @@
      */
     @ApiModelProperty(value = "绉戝浠g爜")
     private String deptcode;
+
+    /**
+     * 绉戝浠g爜
+     */
+    @ApiModelProperty(value = "绉戝浠g爜闆嗗悎")
+    private List<String> deptcodes;
 
     /**
      * 绉戝鍚嶇О
@@ -161,7 +168,7 @@
     private String hpi;
 
     /**
-     鎮h�呮。妗堢紪鍙� 鐜扮梾鍙�
+     * 鎮h�呮。妗堢紪鍙� 鐜扮梾鍙�
      */
     @ApiModelProperty(value = "鎮h�呮。妗堢紪鍙�")
     private String patno;
diff --git a/smartor/src/main/java/com/smartor/domain/PatTaskRelevance.java b/smartor/src/main/java/com/smartor/domain/PatTaskRelevance.java
index 4683837..b8251cf 100644
--- a/smartor/src/main/java/com/smartor/domain/PatTaskRelevance.java
+++ b/smartor/src/main/java/com/smartor/domain/PatTaskRelevance.java
@@ -217,7 +217,7 @@
     @Excel(name = "鍙戦�佹椂闂�")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @ApiModelProperty("鍙戦�佹椂闂�")
-    private Date visitTime;
+    private Date visittime;
 
 
     /**
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceSLTDDeptReqVO.java b/smartor/src/main/java/com/smartor/domain/ServiceSLTDDeptReqVO.java
new file mode 100644
index 0000000..adcadef
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/domain/ServiceSLTDDeptReqVO.java
@@ -0,0 +1,48 @@
+package com.smartor.domain;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@ApiModel(value = "ServiceSLTDCommonReqVO", description = "鐪佺珛鍚屽痉鍑虹瀹ょ梾鍖鸿姹備俊鎭�")
+@Data
+public class ServiceSLTDDeptReqVO {
+    @ApiModelProperty(value = "鏈烘瀯ID 鏈烘瀯鍞竴缂栧彿")
+    private String orgId;
+
+    @ApiModelProperty(value = "闄㈠尯ID")
+    private List<Long> campusIds;
+
+    @ApiModelProperty(value = "鏈烘瀯瀛︾锛屽瓧鍏竎ode")
+    private String orgSubjectCode;
+
+
+    @ApiModelProperty(value = "鍥介檯瀛︾锛屽瓧鍏竎ode ")
+    private String subjectCode;
+
+    @ApiModelProperty(value = "绉戝鍚嶇О妯$硦鍖归厤")
+    private Long searchText;
+
+    @ApiModelProperty(value = "閮ㄩ棬缁村害:  201-浜轰簨  202-涓氬姟  涓嶄紶-鍏ㄩ儴")
+    private Long deptDimensions;
+
+
+    @ApiModelProperty(value = "鏈嶅姟鑼冨洿  锛� 鎬ヨ瘖-emergency 鍖绘妧-medicalTechnology  闂ㄨ瘖-outpatient 浣忛櫌-hospitalization 浣撴-physicalExamination" +
+            "鎵嬫湳-operation 鑽埧-drugRoom  鑽簱-drugWarehouse 鏉愭枡搴�-materialWarehouse   鎶㈡晳-rescue  鐣欒-observation 闈欓厤-venousConfig")
+    private List<String> serviceScopes;
+
+
+    @ApiModelProperty(value = "鏄惁鏄梾鍖�: 0-涓嶆槸 1-鏄�")
+    private Integer inpatientArea;
+
+    @ApiModelProperty(value = "鍋滅敤鐘舵�� : 1-鏈仠鐢� 0-鍋滅敤 涓嶄紶-鍏ㄩ儴")
+    private Integer status;
+
+
+    @ApiModelProperty(value = "閮ㄩ棬绫诲瀷锛� FH0132.01-鍖荤枟   FH0132.02-鏁欏  FH0132.03-绉戠爺  FH0132.04-琛屾斂  FH0132.05-鍚庡嫟 FH0132.06-鍏朵粬")
+    private String deptType;
+
+
+}
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceSLTDInhospReqVO.java b/smartor/src/main/java/com/smartor/domain/ServiceSLTDInhospReqVO.java
index b786b49..5257de7 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceSLTDInhospReqVO.java
+++ b/smartor/src/main/java/com/smartor/domain/ServiceSLTDInhospReqVO.java
@@ -13,7 +13,7 @@
     private String orgId;
 
     @ApiModelProperty(value = "闄㈠尯ID")
-    private Long campusIds;
+    private Long campusId;
 
     @ApiModelProperty(value = "鎮h�呭鍚�   蹇呭~涓�涓�")
     private String patientName;
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceSubTaskMYDAnswerReq.java b/smartor/src/main/java/com/smartor/domain/ServiceSubTaskMYDAnswerReq.java
new file mode 100644
index 0000000..b3bcba7
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/domain/ServiceSubTaskMYDAnswerReq.java
@@ -0,0 +1,30 @@
+package com.smartor.domain;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 鐢佃瘽闂鍥炵瓟鏄庣粏
+ *
+ * @author ls
+ * @date 2023-06-05
+ */
+@ApiModel(value = "ServiceSubTaskAnswerReq", description = "闂鍥炵瓟鏄庣粏")
+@Data
+public class ServiceSubTaskMYDAnswerReq {
+
+    @ApiModelProperty(value = "闂嵎缁撴灉")
+    private List<SvyLibTemplateScriptVO> svyLibTemplateScriptVOS;
+
+    @ApiModelProperty(value = "娴佹按鍙�")
+    private String serialnum;
+
+    @ApiModelProperty(value = "浠诲姟ID")
+    private String taskId;
+
+    @ApiModelProperty(value = "浣忛櫌 1   闂ㄨ瘖2    鎶曡瘔3")
+    private String mzzy;
+}
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceSubtask.java b/smartor/src/main/java/com/smartor/domain/ServiceSubtask.java
index 69c18ee..e0ac5c6 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceSubtask.java
+++ b/smartor/src/main/java/com/smartor/domain/ServiceSubtask.java
@@ -68,8 +68,8 @@
     /**
      * 寮傚父鏍囪瘑
      */
-    @ApiModelProperty(value = "寮傚父鏍囪瘑")
-    @Excel(name = " 寮傚父鏍囪瘑 ")
+    @ApiModelProperty(value = "寮傚父鏍囪瘑锛�0缁胯壊锛�1绾㈣壊锛�2榛勮壊")
+    @Excel(name = " 寮傚父鏍囪瘑:0缁胯壊锛�1绾㈣壊锛�2榛勮壊 ")
     private String excep;
 
     /**
@@ -158,8 +158,8 @@
     /**
      * 鏈嶅姟绫诲瀷(1銆佺洃娴嬭瘎浼帮紱2銆佸嚭闄㈤殢璁匡紱3銆侀棬璇婇殢璁匡紱4銆佸鏁欏叧鎬�锛�5銆佸璇婄鐞嗭紱6銆佹弧鎰忓害璋冩煡锛�7銆佹偅鑰呮姤鍛婏紱 8銆佸叾浠栭�氱煡 9浣撴闅忚 10.鍖绘妧闅忚  11锛屽奖鍍忎笓绉戦殢璁�  12銆佸績鐢典笓绉戦殢璁匡紝 13涓撶闅忚)
      */
-    @Excel(name = "鏈嶅姟绫诲瀷(1銆佺洃娴嬭瘎浼帮紱2銆佸嚭闄㈤殢璁匡紱3銆侀棬璇婇殢璁匡紱4銆佸鏁欏叧鎬�锛�5銆佸璇婄鐞嗭紱6銆佹弧鎰忓害璋冩煡锛�7銆佹偅鑰呮姤鍛婏紱 8銆佸叾浠栭�氱煡 9浣撴闅忚 10.鍖绘妧闅忚  11锛屽奖鍍忎笓绉戦殢璁�  12銆佸績鐢典笓绉戦殢璁匡紝 13涓撶闅忚)")
-    @ApiModelProperty(value = "鏈嶅姟绫诲瀷(1銆佺洃娴嬭瘎浼帮紱2銆佸嚭闄㈤殢璁匡紱3銆侀棬璇婇殢璁匡紱4銆佸鏁欏叧鎬�锛�5銆佸璇婄鐞嗭紱6銆佹弧鎰忓害璋冩煡锛�7銆佹偅鑰呮姤鍛婏紱 8銆佸叾浠栭�氱煡 9浣撴闅忚 10.鍖绘妧闅忚  11锛屽奖鍍忎笓绉戦殢璁�  12銆佸績鐢典笓绉戦殢璁匡紝 13涓撶闅忚")
+    @Excel(name = "鏈嶅姟绫诲瀷(1銆佺洃娴嬭瘎浼帮紱2銆佸嚭闄㈤殢璁匡紱3銆侀棬璇婇殢璁匡紱4銆佸鏁欏叧鎬�锛�5銆佸璇婄鐞嗭紱6銆佷綇闄㈡弧鎰忓害璋冩煡锛�7銆佹偅鑰呮姤鍛婏紱 8銆佸叾浠栭�氱煡 9浣撴闅忚 10.鍖绘妧闅忚  11锛屽奖鍍忎笓绉戦殢璁�  12銆佸績鐢典笓绉戦殢璁匡紝 13涓撶闅忚   14銆侀棬璇婃弧鎰忓害璋冩煡  15鎶曡瘔寤鸿 16璇鹃闅忚")
+    @ApiModelProperty(value = "鏈嶅姟绫诲瀷(1銆佺洃娴嬭瘎浼帮紱2銆佸嚭闄㈤殢璁匡紱3銆侀棬璇婇殢璁匡紱4銆佸鏁欏叧鎬�锛�5銆佸璇婄鐞嗭紱6銆佷綇闄㈡弧鎰忓害璋冩煡锛�7銆佹偅鑰呮姤鍛婏紱 8銆佸叾浠栭�氱煡 9浣撴闅忚 10.鍖绘妧闅忚  11锛屽奖鍍忎笓绉戦殢璁�  12銆佸績鐢典笓绉戦殢璁匡紝 13涓撶闅忚   14銆侀棬璇婃弧鎰忓害璋冩煡  15鎶曡瘔寤鸿  16璇鹃闅忚")
     private String serviceType;
 
     /**
@@ -361,6 +361,13 @@
     private String preachform;
 
     /**
+     * 褰撳墠鍙戦�佹柟寮�
+     */
+    @Excel(name = " 褰撳墠鍙戦�佹柟寮�")
+    @ApiModelProperty("褰撳墠鍙戦�佹柟寮�")
+    private String currentPreachform;
+
+    /**
      * 搴婂彿
      */
     @Excel(name = "搴婂彿")
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskDetail.java b/smartor/src/main/java/com/smartor/domain/ServiceSubtaskDetail.java
index 1c4ceb8..eb084f8 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskDetail.java
+++ b/smartor/src/main/java/com/smartor/domain/ServiceSubtaskDetail.java
@@ -23,7 +23,7 @@
     private static final long serialVersionUID = 1L;
 
     @ApiModelProperty(value = "涓婚敭")
-    private String id;
+    private Long id;
 
     @ApiModelProperty(value = "瀛愪换鍔D")
     private Long subId;
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskPreachform.java b/smartor/src/main/java/com/smartor/domain/ServiceSubtaskPreachform.java
new file mode 100644
index 0000000..e4fbae5
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/domain/ServiceSubtaskPreachform.java
@@ -0,0 +1,89 @@
+package com.smartor.domain;
+
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 銆愯濉啓鍔熻兘鍚嶇О銆戝璞� service_subtask_preachform
+ *
+ * @author lihu
+ * @date 2025-09-15
+ */
+@Data
+@ApiModel("銆愯濉啓鍔熻兘鍚嶇О銆�")
+public class ServiceSubtaskPreachform extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * $column.columnComment
+     */
+    @ApiModelProperty("$column.columnComment")
+    //鏁版嵁搴撹嚜澧炴敼鎴怈TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 浠诲姟ID
+     */
+    @ApiModelProperty("浠诲姟ID")
+    @Excel(name = "浠诲姟ID")
+    private Long subid;
+
+    /**
+     * 鏈嶅姟ID
+     */
+    @ApiModelProperty("鏈嶅姟ID")
+    @Excel(name = "鏈嶅姟ID")
+    private Long taskid;
+
+    /**
+     * 鍙戦�佹柟寮�(1,浜哄伐 2,绾歌川  3,鐢佃瘽  4,鐭俊  5.寰俊鍏紬鍙� 6.寰俊灏忕▼搴� 7.鏀粯瀹濆皬绋嬪簭  8.鏅鸿兘鏈哄櫒浜�  9.閽夐拤)
+     */
+    @ApiModelProperty("鍙戦�佹柟寮�")
+    @Excel(name = "鍙戦�佹柟寮�")
+    private String preachform;
+
+    /**
+     * 鐭俊鐘舵�侊細1鏈彂閫�    2宸插彂閫�   3宸查鍙�   4鍙风爜閿欒(鏃犳剰涔夛紝涓轰簡鍜屽叾瀹冮厤骞�)     5鍙戦�佸け璐�  6涓嶆墽琛�    9瀹屾垚
+     * <p>
+     * 寰俊鐘舵�侊細1鏈彂閫�    2宸插彂閫�   3宸查鍙�   4寰俊鍙烽敊璇�(鏃犳剰涔夛紝涓轰簡鍜屽叾瀹冮厤骞�)    5鍙戦�佸け璐�  6涓嶆墽琛�    9瀹屾垚
+     * <p>
+     * 鏅鸿兘璇煶鐘舵�侊細1鏈墽琛�  2宸插彂閫�  3鎷掓帴鎷掕   4鍙风爜閿欒   5鎵ц澶辫触   6涓嶆墽琛�   9瀹屾垚
+     * <p>
+     * 浜哄伐闅忚鐘舵�侊細1鏈墽琛�   2寰呬汉宸ョ‘璁�  3鎷掓帴鎷掕  4鍙风爜閿欒   5鎵ц澶辫触   6涓嶆墽琛�      9瀹屾垚
+     * <p>
+     * 闈㈣鐘舵�侊細1鏈墽琛�   9瀹屾垚
+     */
+    @ApiModelProperty("鍙戦�佺姸鎬�")
+    private String sendstate;
+
+    /**
+     * 鏈烘瀯缂栫爜
+     */
+    @ApiModelProperty("鏈烘瀯缂栫爜")
+    @Excel(name = "鏈烘瀯缂栫爜")
+    private String orgid;
+
+    /**
+     * 鍒犻櫎鐘舵��
+     */
+    @ApiModelProperty("鍒犻櫎鐘舵��")
+    private String delFlag;
+
+    /**
+     * 椤哄簭
+     */
+    @ApiModelProperty("椤哄簭")
+    @Excel(name = "椤哄簭")
+    private Long sort;
+
+    /**
+     * 琛ュ伩鏃堕棿锛堝崟浣嶅ぉ锛�
+     */
+    @ApiModelProperty("琛ュ伩鏃堕棿锛堝崟浣嶅ぉ锛�")
+    @Excel(name = "琛ュ伩鏃堕棿锛堝崟浣嶅ぉ锛�")
+    private String compensateTime;
+}
+
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskVO.java b/smartor/src/main/java/com/smartor/domain/ServiceSubtaskVO.java
index 7a5806f..3b15a25 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskVO.java
+++ b/smartor/src/main/java/com/smartor/domain/ServiceSubtaskVO.java
@@ -260,14 +260,14 @@
      * 鍙戦�佺姸鎬�
      */
     @Excel(name = " 鍙戦�佺姸鎬� ")
-    @ApiModelProperty(value = "鍙戦�佺姸鎬� : 1鏂板缓 2鎵ц涓� 3鏆傚仠 4缁堟 5瀹屾垚")
+    @ApiModelProperty(value = "鍙戦�佺姸鎬� 1 琚鍙�(鍦ㄤ换鍔′腑鏄柊寤猴紝鍦ㄦ湇鍔′腑鏄棰嗗彇)  2 寰呭彂閫�  3 宸插彂閫�  4 涓嶆墽琛�  5 鍙戦�佸け璐� 6 宸插畬鎴�")
     private Long sendstate;
 
     /**
      * 鍙戦�佺姸鎬�
      */
     @Excel(name = " 鍙戦�佺姸鎬侀泦鍚� ")
-    @ApiModelProperty(value = "鍙戦�佺姸鎬� : 1鏂板缓 2鎵ц涓� 3鏆傚仠 4缁堟 5瀹屾垚")
+    @ApiModelProperty(value = "鍙戦�佺姸鎬� 1 琚鍙�(鍦ㄤ换鍔′腑鏄柊寤猴紝鍦ㄦ湇鍔′腑鏄棰嗗彇)  2 寰呭彂閫�  3 宸插彂閫�  4 涓嶆墽琛�  5 鍙戦�佸け璐� 6 宸插畬鎴�")
     private List<Long> sendstates;
 
 
@@ -435,6 +435,13 @@
     @ApiModelProperty(value = "瀹f暀褰㈠紡 : 1,鏂囨湰銆�2,鍥剧墖銆�3,璇煶銆�4,瑙嗛銆�5,娣峰悎")
     private String preachform;
 
+    /**
+     * 褰撳墠鍙戦�佹柟寮�
+     */
+    @Excel(name = " 褰撳墠鍙戦�佹柟寮�")
+    @ApiModelProperty(value = "褰撳墠鍙戦�佹柟寮�")
+    private String currentPreachform;
+
 
     /**
      * 搴婂彿
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceTask.java b/smartor/src/main/java/com/smartor/domain/ServiceTask.java
index cadd372..ee96b03 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceTask.java
+++ b/smartor/src/main/java/com/smartor/domain/ServiceTask.java
@@ -172,10 +172,10 @@
     private String type;
 
     /**
-     * 鏈嶅姟绫诲瀷(1銆佺洃娴嬭瘎浼帮紱2銆佸嚭闄㈤殢璁匡紱3銆侀棬璇婇殢璁匡紱4銆佸鏁欏叧鎬�锛�5銆佸璇婇�氱煡锛�6銆佹弧鎰忓害璋冩煡锛�7銆佹偅鑰呮姤鍛婏紱 8銆佸叾浠栭�氱煡)
+     * "鏈嶅姟绫诲瀷(1銆佺洃娴嬭瘎浼帮紱2銆佸嚭闄㈤殢璁匡紱3銆侀棬璇婇殢璁匡紱4銆佸鏁欏叧鎬�锛�5銆佸璇婄鐞嗭紱6銆佷綇闄㈡弧鎰忓害璋冩煡锛�7銆佹偅鑰呮姤鍛婏紱 8銆佸叾浠栭�氱煡 9浣撴闅忚 10.鍖绘妧闅忚  11锛屽奖鍍忎笓绉戦殢璁�  12銆佸績鐢典笓绉戦殢璁匡紝 13涓撶闅忚   14銆侀棬璇婃弧鎰忓害璋冩煡  15鎶曡瘔寤鸿"
      */
-    @Excel(name = "鏈嶅姟绫诲瀷(1銆佺洃娴嬭瘎浼帮紱2銆佸嚭闄㈤殢璁匡紱3銆侀棬璇婇殢璁匡紱4銆佸鏁欏叧鎬�锛�5銆佸璇婇�氱煡锛�6銆佹弧鎰忓害璋冩煡锛�7銆佹偅鑰呮姤鍛婏紱 8銆佸叾浠栭�氱煡)")
-    @ApiModelProperty(value = "鏈嶅姟绫诲瀷 : 1銆佺洃娴嬭瘎浼帮紱2銆佸嚭闄㈤殢璁匡紱3銆侀棬璇婇殢璁匡紱4銆佸鏁欏叧鎬�锛�5銆佸璇婄鐞嗭紱6銆佹弧鎰忓害璋冩煡锛�7銆佹偅鑰呮姤鍛婏紱 8銆佸叾浠栭�氱煡 9浣撴闅忚 10.鍖绘妧闅忚  11锛屽奖鍍忎笓绉戦殢璁�  12銆佸績鐢典笓绉戦殢璁匡紝 13涓撶梾闅忚")
+    @Excel(name = "鏈嶅姟绫诲瀷(1銆佺洃娴嬭瘎浼帮紱2銆佸嚭闄㈤殢璁匡紱3銆侀棬璇婇殢璁匡紱4銆佸鏁欏叧鎬�锛�5銆佸璇婄鐞嗭紱6銆佷綇闄㈡弧鎰忓害璋冩煡锛�7銆佹偅鑰呮姤鍛婏紱 8銆佸叾浠栭�氱煡 9浣撴闅忚 10.鍖绘妧闅忚  11锛屽奖鍍忎笓绉戦殢璁�  12銆佸績鐢典笓绉戦殢璁匡紝 13涓撶闅忚   14銆侀棬璇婃弧鎰忓害璋冩煡  15鎶曡瘔寤鸿 16璇鹃闅忚")
+    @ApiModelProperty(value = "鏈嶅姟绫诲瀷(1銆佺洃娴嬭瘎浼帮紱2銆佸嚭闄㈤殢璁匡紱3銆侀棬璇婇殢璁匡紱4銆佸鏁欏叧鎬�锛�5銆佸璇婄鐞嗭紱6銆佷綇闄㈡弧鎰忓害璋冩煡锛�7銆佹偅鑰呮姤鍛婏紱 8銆佸叾浠栭�氱煡 9浣撴闅忚 10.鍖绘妧闅忚  11锛屽奖鍍忎笓绉戦殢璁�  12銆佸績鐢典笓绉戦殢璁匡紝 13涓撶闅忚   14銆侀棬璇婃弧鎰忓害璋冩煡  15鎶曡瘔寤鸿 16璇鹃闅忚")
     private String serviceType;
 
     /**
@@ -312,7 +312,7 @@
     /**
      * pageSize
      */
-    @ApiModelProperty("鏄惁鏄暱鏈熶换鍔� 0锛氫笉鏄�    1锛氭槸")
+    @ApiModelProperty("鏄惁鏄暱鏈熶换鍔� 0锛氫复鏃朵换鍔�    1锛氶暱鏈熶换鍔�   2鍥哄畾浠诲姟   3寰幆浠诲姟")
     private Integer longTask;
 
     /**
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceTaskScriptQues.java b/smartor/src/main/java/com/smartor/domain/ServiceTaskScriptQues.java
index bc949ff..92c5897 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceTaskScriptQues.java
+++ b/smartor/src/main/java/com/smartor/domain/ServiceTaskScriptQues.java
@@ -22,13 +22,30 @@
     private String param1;
 
     /**
-     * patid
+     * patid 鎴� 娴佹按鍙�
+     * 璇婄枟璁板綍鍙�
      */
-    @Excel(name = "patid  ")
-    @ApiModelProperty(value = "patid")
+    @Excel(name = "patid 鎴�  浣忛櫌娴佹按鍙� ")
+    @ApiModelProperty(value = "patid 鎴� 浣忛櫌娴佹按鍙�")
     private String param2;
 
     /**
+     * patid 鎴� 娴佹按鍙�
+     * 璇婄枟璁板綍鍙�
+     */
+    @Excel(name = "闂ㄨ瘖娴佹按鍙�  ")
+    @ApiModelProperty(value = "闂ㄨ瘖娴佹按鍙�")
+    private String param3;
+
+    /**
+     * 鎶曡瘔鎮h�呯紪鍙�
+     * 鎶曡瘔鎮h�呯紪鍙�
+     */
+    @Excel(name = "鎶曡瘔鎮h�呯紪鍙� patientId ")
+    @ApiModelProperty(value = "鎶曡瘔鎮h�呯紪鍙� patientId")
+    private String param4;
+
+    /**
      * patfrom
      */
     @Excel(name = "patfrom  ")
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceTaskVO.java b/smartor/src/main/java/com/smartor/domain/ServiceTaskVO.java
index 0e7ee2d..37f3e82 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceTaskVO.java
+++ b/smartor/src/main/java/com/smartor/domain/ServiceTaskVO.java
@@ -121,14 +121,27 @@
      */
     @Excel(name = "  ")
     private Long fail;
-
     /**
      * 浠诲姟褰㈠紡 1,澶氬獟浣�   2,绾歌川  3,鐢佃瘽  4,鐭俊  5.寰俊鍏紬鍙� 6.寰俊灏忕▼搴�  7.鏀粯瀹�  8.鏅鸿兘灏忕▼搴�  9.閽夐拤
      */
-    @Excel(name = "  浠诲姟褰㈠紡 1,澶氬獟浣�   2,绾歌川  3,鐢佃瘽  4,鐭俊  5.寰俊鍏紬鍙� 6.寰俊灏忕▼搴�  7.鏀粯瀹�  8.鏅鸿兘灏忕▼搴�  9.閽夐拤 ")
-    @ApiModelProperty(value = " 浠诲姟褰㈠紡 1,澶氬獟浣�   2,绾歌川  3,鐢佃瘽  4,鐭俊  5.寰俊鍏紬鍙� 6.寰俊灏忕▼搴�  7.鏀粯瀹�  8.鏅鸿兘灏忕▼搴�  9.閽夐拤 ")
+    @Excel(name = "  浠诲姟褰㈠紡 1,浜哄伐   2,绾歌川  3,鐢佃瘽  4,鐭俊  5.寰俊鍏紬鍙� 6.寰俊灏忕▼搴�  7.鏀粯瀹�  8.鏅鸿兘灏忕▼搴�  9.閽夐拤 ")
+    @ApiModelProperty(value = " 浠诲姟褰㈠紡 1,浜哄伐   2,绾歌川  3,鐢佃瘽  4,鐭俊  5.寰俊鍏紬鍙� 6.寰俊灏忕▼搴�  7.鏀粯瀹�  8.鏅鸿兘灏忕▼搴�  9.閽夐拤 ")
     private String preachform;
 
+    /**
+     * 浠诲姟褰㈠紡 1,澶氬獟浣�   2,绾歌川  3,鐢佃瘽  4,鐭俊  5.寰俊鍏紬鍙� 6.寰俊灏忕▼搴�  7.鏀粯瀹�  8.鏅鸿兘灏忕▼搴�  9.閽夐拤
+     * [
+     *     {
+     *         "sort": 1,   //搴忓彿
+     *         "preachform": "1",  //鍙戦�佹柟寮�
+     *         "compensateTime": 2   //琛ュ伩鏃堕棿
+     *     }
+     * ]
+     */
+    @Excel(name = "  浠诲姟褰㈠紡 1,浜哄伐   2,绾歌川  3,鐢佃瘽  4,鐭俊  5.寰俊鍏紬鍙� 6.寰俊灏忕▼搴�  7.鏀粯瀹�  8.鏅鸿兘灏忕▼搴�  9.閽夐拤 ")
+    @ApiModelProperty(value = " 浠诲姟褰㈠紡 1,浜哄伐   2,绾歌川  3,鐢佃瘽  4,鐭俊  5.寰俊鍏紬鍙� 6.寰俊灏忕▼搴�  7.鏀粯瀹�  8.鏅鸿兘灏忕▼搴�  9.閽夐拤 ")
+    private List<ServiceSubtaskPreachform> preachformList;
+
 
     /**
      *
diff --git a/smartor/src/main/java/com/smartor/domain/SvyTaskAnswer.java b/smartor/src/main/java/com/smartor/domain/SvyTaskAnswer.java
index 84086c3..982945a 100644
--- a/smartor/src/main/java/com/smartor/domain/SvyTaskAnswer.java
+++ b/smartor/src/main/java/com/smartor/domain/SvyTaskAnswer.java
@@ -70,10 +70,10 @@
     private String istrack;
 
     /**
-     * 寮傚父棰勮锛堟槸锛�1銆佸惁锛�0锛�
+     * 寮傚父棰勮锛�0缁胯壊锛�1绾㈣壊锛�2榛勮壊
      */
-    @ApiModelProperty(value = "寮傚父棰勮  鏄�=锛�1銆佸惁锛�0")
-    private String isabnormal;
+    @ApiModelProperty(value = "寮傚父棰勮锛�0缁胯壊锛�1绾㈣壊锛�2榛勮壊")
+    private Long isabnormal;
 
     /**
      * 鍒犻櫎鏍囧織锛�0锛氭湭鍒犻櫎 1锛氬凡鍒犻櫎锛�
diff --git a/smartor/src/main/java/com/smartor/domain/SvyTaskTemplateScriptVO.java b/smartor/src/main/java/com/smartor/domain/SvyTaskTemplateScriptVO.java
index 96449a0..89161f7 100644
--- a/smartor/src/main/java/com/smartor/domain/SvyTaskTemplateScriptVO.java
+++ b/smartor/src/main/java/com/smartor/domain/SvyTaskTemplateScriptVO.java
@@ -191,6 +191,13 @@
     @ApiModelProperty(value = "闂缁撴灉 ,缁�=鈥滃�肩被鍨嬧�濇槸鏂囨湰鎴栬�呮暟鍊肩敤鐨�")
     private String scriptResult;
 
+
+    /**
+     * 寮傚父棰勮锛�0缁胯壊锛�1绾㈣壊锛�2榛勮壊
+     */
+    @ApiModelProperty(value = "寮傚父棰勮锛�0缁胯壊锛�1绾㈣壊锛�2榛勮壊")
+    private Long isabnormal;
+
     /**
      * 鍙橀噺鍙傛暟闆嗗悎
      */
diff --git a/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskMapper.java b/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskMapper.java
index 90a640b..cba167c 100644
--- a/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskMapper.java
+++ b/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskMapper.java
@@ -31,6 +31,10 @@
      */
     public List<ServiceSubtask> selectServiceSubtaskList(ServiceSubtaskVO serviceSubtaskVO);
 
+    public List<ServiceSubtask> queryServiceSubtaskList(ServiceSubtaskVO serviceSubtaskVO);
+
+    public List<ServiceSubtask> selectServiceSubtaskBySendstate(ServiceSubtaskVO serviceSubtaskVO);
+
     public List<ServiceSubtask> selectServiceSubtaskListByCreateTime(ServiceSubtaskVO serviceSubtaskVO);
 
     public List<ServiceSubtask> selectServiceSubtaskListAgain(ServiceSubtaskVO serviceSubtaskVO);
diff --git a/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskPreachformMapper.java b/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskPreachformMapper.java
new file mode 100644
index 0000000..b136f2b
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskPreachformMapper.java
@@ -0,0 +1,73 @@
+package com.smartor.mapper;
+
+import java.util.List;
+import org.apache.ibatis.annotations.Mapper;
+import com.smartor.domain.ServiceSubtaskPreachform;
+
+/**
+ * 銆愯濉啓鍔熻兘鍚嶇О銆慚apper鎺ュ彛
+ *
+ * @author lihu
+ * @date 2025-09-15
+ */
+@Mapper
+public interface ServiceSubtaskPreachformMapper
+{
+    /**
+     * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆�
+     *
+     * @param id 銆愯濉啓鍔熻兘鍚嶇О銆戜富閿�
+     * @return 銆愯濉啓鍔熻兘鍚嶇О銆�
+     */
+    public ServiceSubtaskPreachform selectServiceSubtaskPreachformById(Long id);
+
+    /**
+     * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆戝垪琛�
+     *
+     * @param serviceSubtaskPreachform 銆愯濉啓鍔熻兘鍚嶇О銆�
+     * @return 銆愯濉啓鍔熻兘鍚嶇О銆戦泦鍚�
+     */
+    public List<ServiceSubtaskPreachform> selectServiceSubtaskPreachformList(ServiceSubtaskPreachform serviceSubtaskPreachform);
+
+    /**
+     * 鏂板銆愯濉啓鍔熻兘鍚嶇О銆�
+     *
+     * @param serviceSubtaskPreachform 銆愯濉啓鍔熻兘鍚嶇О銆�
+     * @return 缁撴灉
+     */
+    public int insertServiceSubtaskPreachform(ServiceSubtaskPreachform serviceSubtaskPreachform);
+
+    /**
+     * 淇敼銆愯濉啓鍔熻兘鍚嶇О銆�
+     *
+     * @param serviceSubtaskPreachform 銆愯濉啓鍔熻兘鍚嶇О銆�
+     * @return 缁撴灉
+     */
+    public int updateServiceSubtaskPreachform(ServiceSubtaskPreachform serviceSubtaskPreachform);
+    public int updateSSPByCondition(ServiceSubtaskPreachform serviceSubtaskPreachform);
+
+    /**
+     * 鍒犻櫎銆愯濉啓鍔熻兘鍚嶇О銆�
+     *
+     * @param id 銆愯濉啓鍔熻兘鍚嶇О銆戜富閿�
+     * @return 缁撴灉
+     */
+    public int deleteServiceSubtaskPreachformById(Long id);
+
+    /**
+     * 鏍规嵁subid鍒犻櫎璇ュ瓙浠诲姟鐨勬墍鏈夊彂閫佹柟寮�
+     * @param subIds
+     * @return
+     */
+    public int deleteServiceSubtaskPreachformBySubid(Long subIds);
+
+
+
+    /**
+     * 鎵归噺鍒犻櫎銆愯濉啓鍔熻兘鍚嶇О銆�
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteServiceSubtaskPreachformByIds(Long[] ids);
+}
diff --git a/smartor/src/main/java/com/smartor/mapper/SysDept2Mapper.java b/smartor/src/main/java/com/smartor/mapper/SysDept2Mapper.java
index 95a5967..5a4b6a7 100644
--- a/smartor/src/main/java/com/smartor/mapper/SysDept2Mapper.java
+++ b/smartor/src/main/java/com/smartor/mapper/SysDept2Mapper.java
@@ -38,7 +38,7 @@
      */
     public SysDept selectDeptById(Long deptId);
 
-    public SysDept selectDeptByCode(String deptCode);
+    public SysDept selectDeptByCode(@Param("deptCode")String deptCode,@Param("orgid")String orgid);
 
     /**
      * 鏍规嵁ID鏌ヨ鎵�鏈夊瓙閮ㄩ棬
diff --git a/smartor/src/main/java/com/smartor/service/IHNGatherPatArchiveService.java b/smartor/src/main/java/com/smartor/service/IHNGatherPatArchiveService.java
index 40234b9..ec1c3a7 100644
--- a/smartor/src/main/java/com/smartor/service/IHNGatherPatArchiveService.java
+++ b/smartor/src/main/java/com/smartor/service/IHNGatherPatArchiveService.java
@@ -42,7 +42,7 @@
     /**
      * 闂ㄦ�ヨ瘖淇℃伅
      *
-     * @param id
+     * @param patMedOuthosp
      * @return
      */
     public Integer selectPatMedOuthospList(PatMedOuthosp patMedOuthosp);
diff --git a/smartor/src/main/java/com/smartor/service/IServiceSLTDHealthcareRecordService.java b/smartor/src/main/java/com/smartor/service/IServiceSLTDHealthcareRecordService.java
index f8aafc2..a06fa67 100644
--- a/smartor/src/main/java/com/smartor/service/IServiceSLTDHealthcareRecordService.java
+++ b/smartor/src/main/java/com/smartor/service/IServiceSLTDHealthcareRecordService.java
@@ -1,5 +1,6 @@
 package com.smartor.service;
 
+import com.smartor.domain.ServiceSLTDDeptReqVO;
 import com.smartor.domain.ServiceSLTDInhospReqVO;
 import com.smartor.domain.ServiceSLTDInhospResDTO;
 
@@ -43,7 +44,7 @@
      * @return 鍙傝��
      * {
      * "orgId": 20001001,
-     * "campusIds": 30001002,
+     * "campusId": 30001002,
      * "unitIds": null,
      * "relationType": null,
      * "searchText": null,
@@ -52,5 +53,21 @@
      */
     Boolean queryHospUserInfoList(ServiceSLTDInhospReqVO reqVO);
 
+    /**
+     * 閲囬泦绉戝鐥呭尯淇℃伅
+     *
+     * @param serviceSLTDDeptReqVO
+     * @return 鍙傝��
+     * {
+     * "orgId": 20001001,
+     * "campusIds": 30001002,
+     * "unitIds": null,
+     * "relationType": null,
+     * "searchText": null,
+     * "status": 1
+     * }
+     */
+    Boolean queryDeptWardAreaInfoList(ServiceSLTDDeptReqVO serviceSLTDDeptReqVO);
+
 
 }
diff --git a/smartor/src/main/java/com/smartor/service/IServiceSubtaskAnswerService.java b/smartor/src/main/java/com/smartor/service/IServiceSubtaskAnswerService.java
index af983cc..5a3dfa9 100644
--- a/smartor/src/main/java/com/smartor/service/IServiceSubtaskAnswerService.java
+++ b/smartor/src/main/java/com/smartor/service/IServiceSubtaskAnswerService.java
@@ -70,6 +70,8 @@
      */
     public Integer saveQuestionAnswer(ServiceSubTaskAnswerReq serviceSubTaskAnswerReq,Long flag);
 
+    public Boolean saveMYDQuestionAnswer(ServiceSubTaskMYDAnswerReq serviceSubTaskMYDAnswerReq);
+
     /**
      * 灏嗛棶棰樹繚瀛樺埌缂撳瓨
      *
diff --git a/smartor/src/main/java/com/smartor/service/IServiceTaskService.java b/smartor/src/main/java/com/smartor/service/IServiceTaskService.java
index 703bb77..dcc24fe 100644
--- a/smartor/src/main/java/com/smartor/service/IServiceTaskService.java
+++ b/smartor/src/main/java/com/smartor/service/IServiceTaskService.java
@@ -77,5 +77,7 @@
      */
     public Map<String, Object> getScriptInfoByCondition(Long taskid, Long patid, Boolean isFinish, String patfrom);
 
+    public Map<String, Object> getScriptByCondition(Long taskid, String zyserialnum, String mzserialnum, String tsserialnum);
+
 
 }
diff --git a/smartor/src/main/java/com/smartor/service/impl/CommonTaskServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/CommonTaskServiceImpl.java
index 54b30ff..c4f7484 100644
--- a/smartor/src/main/java/com/smartor/service/impl/CommonTaskServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/CommonTaskServiceImpl.java
@@ -60,7 +60,6 @@
             //瀹f暀
             return xjSend(sendTaskVO);
         }
-        log.error("璧板埌杩欓噷浜嗗槢");
         return null;
     }
 
@@ -108,6 +107,8 @@
         //鍒ゆ柇浠诲姟鏄惁鏄珛鍗冲彂閫�
         if (StringUtils.isNotEmpty(sendTaskVO.getSendType()) && sendTaskVO.getSendType().equals("2")) {
             String content = sendMQContent(sendTaskVO, ivrTask.getTemplateid().toString(), ivrTask.getPreachform(), ivrTask.getStopState(), null);
+            //鍏堜慨鏀圭姸鎬�
+            updateServiceSubtask(ivrTask.getTaskid(), new Date());
             //绔嬪嵆鍙戦��
             redisCache.setCacheObject(content, content, 1, TimeUnit.SECONDS);
             //灏嗕换鍔$姸鎬佷慨鏀规垚鎵ц涓�
@@ -130,23 +131,23 @@
                 } catch (JsonProcessingException e) {
                     log.error("JsonProcessingException鎶ラ敊浜嗭細{}", e.getMessage());
                 }
+                Date date = new Date();
                 for (TaskSendTimeVO taskSendTimeVO : taskSendTimeVOList) {
-//                    //鍘籗endTimeslot涓紝鑾峰彇鎵�鏈夌殑鏃堕棿娈�
-//                    List<TaskSendTimeVO> list = new ArrayList<>();
-//                    list.add(taskSendTimeVO);
-
                     //鑾峰彇寮�濮嬪彂閫佹椂闂�
                     String begantime = taskSendTimeVO.getBegantime();
                     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                     //璁板綍鐩墠鍒板彂閫佹椂闂寸殑姣鍊� 锛堝彂閫佹椂闂寸殑姣鍊� - 褰撳墠鏃堕棿鐨勬绉掑�硷級
                     Long milliseconds = 1000L;
                     try {
-                        Date date = sdf.parse(begantime);
+                        date = sdf.parse(begantime);
                         milliseconds = date.getTime() - System.currentTimeMillis();
                         System.out.println("鏃ユ湡姣鏁帮細" + milliseconds);
                         SendTaskVO sendTaskVO1 = DtoConversionUtils.sourceToTarget(sendTaskVO, SendTaskVO.class);
                         sendTaskVO1.setSendType("1");
                         String content = sendMQContent(sendTaskVO1, ivrTask.getTemplateid().toString(), ivrTask.getPreachform(), ivrTask.getStopState(), taskSendTimeVO);
+
+                        //鍏堜慨鏀圭姸鎬�
+                        updateServiceSubtask(ivrTask.getTaskid(), date);
                         redisCache.setCacheObject(content, content, milliseconds / 1000, TimeUnit.SECONDS);
                     } catch (Exception e) {
                         e.printStackTrace();
@@ -208,6 +209,8 @@
         if (StringUtils.isNotEmpty(sendTaskVO.getSendType()) && sendTaskVO.getSendType().equals("2")) {
 
             String content = sendMQContent(sendTaskVO, serviceTask1.getTemplateid().toString(), serviceTask1.getPreachform(), serviceTask1.getStopState(), null);
+            //鍏堜慨鏀圭姸鎬�
+            updateServiceSubtask(serviceTask1.getTaskid(), new Date());
             //绔嬪嵆鍙戦��
             redisCache.setCacheObject(content, content, 1, TimeUnit.SECONDS);
 
@@ -228,6 +231,7 @@
                 } catch (JsonProcessingException e) {
                     log.error("JsonProcessingException鎶ラ敊浜嗭細{}", e.getMessage());
                 }
+                Date date = new Date();
                 for (TaskSendTimeVO taskSendTimeVO : taskSendTimeVOList) {
                     //鍘籗endTimeslot涓紝鑾峰彇鎵�鏈夌殑鏃堕棿娈�
 //                    List<TaskSendTimeVO> list = new ArrayList<>();
@@ -239,7 +243,7 @@
                     //璁板綍鐩墠鍒板彂閫佹椂闂寸殑姣鍊� 锛堝彂閫佹椂闂寸殑姣鍊� - 褰撳墠鏃堕棿鐨勬绉掑�硷級
                     Long milliseconds = 1000L;
                     try {
-                        Date date = sdf.parse(begantime);
+                        date = sdf.parse(begantime);
                         milliseconds = date.getTime() - System.currentTimeMillis();
                         if (milliseconds < 0) {
                             milliseconds = 1000L;
@@ -252,6 +256,8 @@
                     SendTaskVO sendTaskVO1 = DtoConversionUtils.sourceToTarget(sendTaskVO, SendTaskVO.class);
                     sendTaskVO1.setSendType("1");
                     String content = sendMQContent(sendTaskVO1, serviceTask1.getTemplateid().toString(), serviceTask1.getPreachform(), serviceTask1.getStopState(), taskSendTimeVO);
+                    //鍏堜慨鏀圭姸鎬�
+                    updateServiceSubtask(serviceTask1.getTaskid(), date);
                     redisCache.setCacheObject(content, content, milliseconds / 1000, TimeUnit.SECONDS);
                 }
                 //灏嗕换鍔$姸鎬佷慨鏀规垚鎵ц涓�
@@ -310,6 +316,8 @@
         if (StringUtils.isNotEmpty(sendTaskVO.getSendType()) && sendTaskVO.getSendType().equals("2")) {
 
             String content = sendMQContent(sendTaskVO, serviceTask1.getLibtemplateid().toString(), serviceTask1.getPreachform(), serviceTask1.getStopState(), null);
+            //鍏堜慨鏀圭姸鎬�
+            updateServiceSubtask(serviceTask1.getTaskid(), new Date());
             //绔嬪嵆鍙戦��
             redisCache.setCacheObject(content, content, 1, TimeUnit.SECONDS);
 
@@ -323,6 +331,7 @@
         } else if (StringUtils.isNotEmpty(sendTaskVO.getSendType()) && sendTaskVO.getSendType().equals("1") || StringUtils.isNotEmpty(sendTaskVO.getSendType()) && sendTaskVO.getSendType().equals("3")) {
             //鏃堕棿娈靛彂閫�
             ObjectMapper objectMapper = new ObjectMapper();
+            Date date = new Date();
             if (StringUtils.isNotEmpty(serviceTask1.getSendTimeSlot())) {
                 List<TaskSendTimeVO> taskSendTimeVOList = null;
                 try {
@@ -342,7 +351,7 @@
                     //璁板綍鐩墠鍒板彂閫佹椂闂寸殑姣鍊� 锛堝彂閫佹椂闂寸殑姣鍊� - 褰撳墠鏃堕棿鐨勬绉掑�硷級
                     Long milliseconds = 1000L;
                     try {
-                        Date date = sdf.parse(begantime);
+                        date = sdf.parse(begantime);
                         milliseconds = date.getTime() - System.currentTimeMillis();
                         System.out.println("鏃ユ湡姣鏁帮細" + milliseconds);
                     } catch (Exception e) {
@@ -352,6 +361,8 @@
                     SendTaskVO sendTaskVO1 = DtoConversionUtils.sourceToTarget(sendTaskVO, SendTaskVO.class);
                     sendTaskVO1.setSendType("1");
                     String content = sendMQContent(sendTaskVO1, serviceTask1.getTemplateid().toString(), serviceTask1.getPreachform(), serviceTask1.getStopState(), taskSendTimeVO);
+                    //鍏堜慨鏀圭姸鎬�
+                    updateServiceSubtask(serviceTask1.getTaskid(), date);
                     redisCache.setCacheObject(content, content, milliseconds / 1000, TimeUnit.SECONDS);
                 }
                 //灏嗕换鍔$姸鎬佷慨鏀规垚鎵ц涓�
@@ -389,4 +400,17 @@
         commonTaskcallMQJson = commonTaskcallMQJson.substring(1, commonTaskcallMQJson.length() - 1);
         return commonTaskcallMQJson;
     }
+
+    private void updateServiceSubtask(Long taskId, Date date) {
+        //鍙杩涘叆闃熷垪灏辩畻寰呭彂閫�
+        ServiceSubtaskVO serviceSubtaskVO = new ServiceSubtaskVO();
+        serviceSubtaskVO.setTaskid(taskId);
+        serviceSubtaskVO.setSendstate(1L);
+        List<ServiceSubtask> serviceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO);
+        for (ServiceSubtask serviceSubtask : serviceSubtaskList) {
+            serviceSubtask.setSendstate(2L);
+            serviceSubtask.setVisitTime(date);
+            serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
+        }
+    }
 }
diff --git a/smartor/src/main/java/com/smartor/service/impl/HNGatherPatArchiveServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/HNGatherPatArchiveServiceImpl.java
index 3ae6888..d1496e0 100644
--- a/smartor/src/main/java/com/smartor/service/impl/HNGatherPatArchiveServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/HNGatherPatArchiveServiceImpl.java
@@ -157,7 +157,7 @@
             PatMedOuthosp patMedOuthosp = new PatMedOuthosp();
             patMedOuthosp.setBeginTime(Date.from(dayStart.atZone(ZoneId.systemDefault()).toInstant()));
             patMedOuthosp.setEndTime(Date.from(dayEnd.atZone(ZoneId.systemDefault()).toInstant()));
-           selectPatMedOuthospList(patMedOuthosp);
+            selectPatMedOuthospList(patMedOuthosp);
         }
         return true;
     }
@@ -204,6 +204,9 @@
     @Override
     public Integer selectUserList(SysUser sysUser) {
         List<SysUser> sysUserList = hnGatherPatArchiveMapper.selectUserList(sysUser);
+        if (CollectionUtils.isEmpty(sysUserList)) return null;
+
+
         log.info("sysUserList鐨勯噰闆嗗埌鐨勬暟閲忎负锛歿}", sysUserList.size());
         int i = sysUser2Mapper.batchUser(sysUserList);
         for (SysUser sysUser1 : sysUserList) {
@@ -240,7 +243,8 @@
     public Integer selectDeptList(SysDept dept) {
         List<SysDept> sysDepts = hnGatherPatArchiveMapper.selectDeptList(dept);
         log.info("selectDeptList鐨勯噰闆嗗埌鐨勬暟閲忎负锛歿}", sysDepts.size());
-        int i = sysDept2Mapper.batchDept(sysDepts);
+        int i = 0;
+        if (CollectionUtils.isNotEmpty(sysDepts)) i = sysDept2Mapper.batchDept(sysDepts);
         return i;
     }
 
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 771f905..7e34d50 100644
--- a/smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
@@ -1,5 +1,8 @@
 package com.smartor.service.impl;
 
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.ruoyi.common.core.domain.entity.SysDept;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.DtoConversionUtils;
@@ -46,7 +49,7 @@
     @Autowired
     private ServiceSubtaskMapper serviceSubtaskMapper;
     @Autowired
-    private SysUserDeptMapper sysUserDeptMapper;
+    private ServiceSubtaskPreachformMapper serviceSubtaskPreachformMapper;
 
     @Value("${visitHosp}")
     private Integer visitHosp;
@@ -619,31 +622,17 @@
                         serviceSubtaskMapper.updateServiceSubtask(serviceSubtask1);
                         //閲嶆柊鏂板瀛愪换鍔�
                         i = serviceSubtaskMapper.insertServiceSubtask(serviceSubtask);
+                        //杩欓噷闇�瑕佸叏澶辫触
+                        addServiceSubtaskPreachform(serviceSubtask, "5");
 
                     }
                 }
-            } else {
-                if (StringUtils.isEmpty(serviceSubtask.getPhone())) {
-                    serviceSubtask.setRemark("鎵嬫満鍙蜂负绌�");
-                    serviceSubtask.setSendstate(4L);
-                    serviceSubtask.setResult("error");
-//                    serviceSubtask.setFinishtime(new Date());
-                }
-                serviceSubtask.setCreateBy(serviceTask.getCreateBy());
-                serviceSubtask.setCreateTime(new Date());
-                i = serviceSubtaskMapper.insertServiceSubtask(serviceSubtask);
             }
         } else {
-            if (StringUtils.isEmpty(serviceSubtask.getPhone())) {
-                serviceSubtask.setRemark("鎵嬫満鍙蜂负绌�");
-                serviceSubtask.setSendstate(4L);
-                serviceSubtask.setResult("error");
-//                serviceSubtask.setFinishtime(new Date());
-
-            }
             serviceSubtask.setCreateBy(serviceTask.getCreateBy());
             serviceSubtask.setCreateTime(new Date());
             i = serviceSubtaskMapper.insertServiceSubtask(serviceSubtask);
+            addServiceSubtaskPreachform(serviceSubtask, null);
         }
         if (i == 1) {
             //灏哻heck_flag鏀规垚1锛堝凡澶勭悊锛�
@@ -667,6 +656,36 @@
         }
     }
 
+    private Integer addServiceSubtaskPreachform(ServiceSubtask serviceSubtask, String sendstate) {
+        //灏唒reachform鐨刯son瀵硅薄锛屾斁鍒發ist闆嗗悎涓�
+        String preachform = serviceSubtask.getPreachform();
+        ObjectMapper objectMapper = new ObjectMapper();
+        if (org.apache.commons.lang3.StringUtils.isNotEmpty(preachform)) {
+            List<ServiceSubtaskPreachform> serviceSubtaskPreachformList = null;
+            try {
+                serviceSubtaskPreachformList = objectMapper.readValue(preachform, new TypeReference<List<ServiceSubtaskPreachform>>() {
+                });
+            } catch (JsonProcessingException e) {
+                log.error("preachform杞琇ist<ServiceSubtaskPreachform>鎶ラ敊浜嗭細{}", e.getMessage());
+            }
+            for (ServiceSubtaskPreachform serviceSubtaskPreachform : serviceSubtaskPreachformList) {
+                serviceSubtaskPreachform.setTaskid(serviceSubtask.getTaskid());
+                serviceSubtaskPreachform.setSubid(serviceSubtask.getId());
+                //杩欎釜sendstate闇�瑕佸湪鏁版嵁搴撹缃竴涓粯璁ゅ�间负鈥�1鈥�
+                serviceSubtaskPreachform.setSendstate("1");
+                if (StringUtils.isNotEmpty(sendstate)) serviceSubtaskPreachform.setSendstate(sendstate);
+
+                serviceSubtaskPreachform.setOrgid(serviceSubtask.getOrgid());
+                return serviceSubtaskPreachformMapper.insertServiceSubtaskPreachform(serviceSubtaskPreachform);
+
+            }
+
+        }
+
+        return 0;
+    }
+
+
     //灏佽serviceSubtask
     private ServiceSubtask boxedServiceSubtask(ServiceTask serviceTask, PatMedInhosp patMedInhosp1, PatArchive patArchive) {
         ServiceSubtask serviceSubtask = DtoConversionUtils.sourceToTarget(serviceTask, ServiceSubtask.class);
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 b087f29..408e684 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java
@@ -2,24 +2,28 @@
 
 import com.google.gson.Gson;
 import com.google.gson.reflect.TypeToken;
+import com.ruoyi.common.core.domain.entity.SysDept;
 import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.domain.entity.SysUserDept;
+import com.ruoyi.common.core.domain.entity.SysUserRole;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.http.HttpUtils;
 import com.smartor.domain.*;
-import com.smartor.mapper.PatMedOuthospMapper;
-import com.smartor.mapper.SysUser2Mapper;
-import com.smartor.mapper.SysUserImportMapper;
+import com.smartor.mapper.*;
 import com.smartor.service.IPatArchiveService;
 import com.smartor.service.IPatMedInhospService;
 import com.smartor.service.IServiceSLTDHealthcareRecordService;
+import com.sun.org.apache.bcel.internal.generic.NEW;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.stereotype.Service;
 
 import java.lang.reflect.Array;
 import java.lang.reflect.Type;
+import java.math.BigDecimal;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.*;
@@ -29,7 +33,7 @@
 public class ServiceSLTDHealthcareRecordServiceImpl implements IServiceSLTDHealthcareRecordService {
 
     private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
-    private static final String APP_KEY = "ak-zUMiOWhqXiJQWPB1pCbz0pjr";
+    public static final String APP_KEY = "ak-zUMiOWhqXiJQWPB1pCbz0pjr";
 
     @Autowired
     private IPatArchiveService patArchiveService;
@@ -43,25 +47,128 @@
     @Autowired
     private SysUser2Mapper sysUser2Mapper;
 
+    @Autowired
+    private SysDept2Mapper sysDeptMapper;
+
+    @Autowired
+    private SysUserDeptMapper sysUserDeptMapper;
+
+    @Autowired
+    private SysUserRole2Mapper sysUserRoleMapper;
+
     @Value("${sltd_pub_path}")
     private String sltdPubPath;
 
+    @Value("${userPwd}")
+    private String userPwd;
+
     @Override
     public List<ServiceSLTDInhospResDTO> queryHealthcareRecordList(ServiceSLTDInhospReqVO reqVO) {
-        log.info("銆恞ueryHealthcareRecordList銆戝紑濮嬭皟鐢ㄧ渷绔嬪悓寰峰仴搴疯褰曟煡璇㈡帴鍙o紝璇锋眰鍙傛暟锛歿}", reqVO);
         try {
+            log.info("銆恞ueryHealthcareRecordList銆戝紑濮嬭皟鐢ㄧ渷绔嬪悓寰峰仴搴疯褰曟煡璇㈡帴鍙o紝璇锋眰鍙傛暟锛歿}", reqVO);
             Map<String, Object> requestParams = buildRequestParams(reqVO);
             Map<String, String> headers = buildRequestHeaders();
+
             String result = HttpUtils.sendPostByHeader(sltdPubPath + "osj/hbos-thirdparty-integration/standard/common/healthcareRecord/dtcQueryHealthcareRecordList", new Gson().toJson(requestParams), headers);
             log.info("銆恞ueryHealthcareRecordList銆戞帴鍙e搷搴旂粨鏋滐細{}", result);
 
             String cry = determineCry(reqVO);
-            return parseResponseData(result, reqVO.getHealthcareRecordTypeList().get(0), cry);
+            return parseResponseData(result, reqVO.getHealthcareRecordTypeList(), cry, reqVO.getCampusId());
         } catch (Exception e) {
             log.error("銆恞ueryHealthcareRecordList銆戣皟鐢ㄧ渷绔嬪悓寰峰仴搴疯褰曟煡璇㈡帴鍙e紓甯革紝璇锋眰鍙傛暟锛歿}", reqVO, e);
             throw new RuntimeException("璋冪敤鐪佺珛鍚屽痉鍋ュ悍璁板綍鏌ヨ鎺ュ彛澶辫触", e);
         }
     }
+
+
+    /**
+     * 閲囬泦绉戝鐥呭尯淇℃伅
+     *
+     * @param serviceSLTDDeptReqVO
+     * @return 鍙傝��
+     * {
+     * "orgId": 20001001,
+     * "campusIds": 30001002,
+     * "unitIds": null,
+     * "relationType": null,
+     * "searchText": null,
+     * "status": 1
+     * }
+     */
+    @Override
+    public Boolean queryDeptWardAreaInfoList(ServiceSLTDDeptReqVO serviceSLTDDeptReqVO) {
+        log.info("銆恞ueryDeptWardAreaInfoList銆戝紑濮嬭皟鐢ㄧ渷绔嬪悓寰风瀹ょ梾鍖烘煡璇㈡帴鍙o紝璇锋眰鍙傛暟锛歿}", serviceSLTDDeptReqVO);
+        try {
+            Map<String, Object> params = new HashMap<>();
+            if (serviceSLTDDeptReqVO.getOrgId() != null) {
+                params.put("orgId", Long.parseLong(serviceSLTDDeptReqVO.getOrgId()));
+            }
+            if (serviceSLTDDeptReqVO.getCampusIds() != null) {
+                params.put("campusIds", serviceSLTDDeptReqVO.getCampusIds());
+            }
+            params.put("subjectCode", serviceSLTDDeptReqVO.getSubjectCode());
+            params.put("orgSubjectCode", serviceSLTDDeptReqVO.getOrgSubjectCode());
+
+            params.put("deptDimensions", serviceSLTDDeptReqVO.getDeptDimensions());
+
+            params.put("serviceScopes", serviceSLTDDeptReqVO.getServiceScopes());
+            params.put("inpatientArea", serviceSLTDDeptReqVO.getInpatientArea());
+            params.put("status", serviceSLTDDeptReqVO.getStatus());
+
+
+            Map<String, String> headers = buildRequestHeaders();
+            String result = HttpUtils.sendPostByHeader(sltdPubPath + "/osj/hbos-thirdparty-integration/standard/common/dept/queryDeptList", new Gson().toJson(params), headers);
+            log.info("銆恞ueryDeptWardAreaInfoList銆戞帴鍙e搷搴旂粨鏋滐細{}", result);
+            List<Map<String, Object>> dataList = getDataList(result);
+            log.info("-----------dataList鎺ュ彛鍝嶅簲缁撴灉锛歿}", dataList.size());
+            for (Map<String, Object> dataItem : dataList) {
+                SysDept sysDept = new SysDept();
+                sysDept.setOrgid("" + serviceSLTDDeptReqVO.getCampusIds().get(0));
+                sysDept.setHisDeptId("" + getLongValue(dataItem, "deptId"));
+                sysDept.setHisParentId(getStringValue(dataItem, "parentDeptId"));
+                //閫氳繃his鐨勭埗绉戝ID鍘绘壘鍒扮瀹D,濉厖parentId
+                if (StringUtils.isNotEmpty(getStringValue(dataItem, "parentDeptId"))) {
+                    SysDept sd = new SysDept();
+                    sd.setHisDeptId(getStringValue(dataItem, "parentDeptId"));
+                    sd.setOrgid(getStringValue(dataItem, "orgId"));
+                    List<SysDept> sysDepts = sysDeptMapper.selectDeptList(sd);
+                    if (CollectionUtils.isNotEmpty(sysDepts)) {
+                        SysDept sysDept1 = sysDepts.get(0);
+                        sysDept.setParentId(sysDept1.getDeptId());
+                        sysDept.setParentName(sysDept1.getDeptName());
+                    }
+                }
+                sysDept.setDeptName(getStringValue(dataItem, "deptName"));
+                Integer inpatientArea = getIntegerValue(dataItem, "inpatientArea");
+                if (inpatientArea != null && inpatientArea == 0) sysDept.setDeptType("1");
+                else if (inpatientArea != null && inpatientArea == 1) sysDept.setDeptType("2");
+                sysDept.setLeader("");
+                Integer status = getIntegerValue(dataItem, "status");
+                if (status != null & status == 0) sysDept.setStatus("1");
+                if (status != null & status == 1) sysDept.setStatus("0");
+                sysDept.setType("");
+                sysDept.setDeptCode("" + getLongValue(dataItem, "deptId"));
+                sysDept.setCreateBy(null);
+                sysDept.setCreateTime(new Date());
+                sysDept.setUpdateTime(new Date());
+                sysDept.setUpdateBy(null);
+
+                SysDept sysDept1 = sysDeptMapper.selectDeptByCode(sysDept.getDeptCode(), sysDept.getOrgid());
+                if (Objects.isNull(sysDept1)) {
+                    int i = sysDeptMapper.insertDept(sysDept);
+                    log.info("ServiceExternalServiceImpl---addDeptInfo鏄惁鏂板鎴愬姛锛歿}", i);
+                } else {
+                    sysDept.setDeptId(sysDept1.getDeptId());
+                    int i = sysDeptMapper.updateDept(sysDept);
+                    log.info("ServiceExternalServiceImpl---addDeptInfo鏄惁淇敼鎴愬姛04锛歿}", i);
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return true;
+    }
+
 
     /**
      * 閲囬泦鍖婚櫌鐢ㄦ埛淇℃伅
@@ -73,11 +180,14 @@
     public Boolean queryHospUserInfoList(ServiceSLTDInhospReqVO reqVO) {
         Map<String, Object> requestParams = buildRequestParams(reqVO);
         Map<String, String> headers = buildRequestHeaders();
-        String result = HttpUtils.sendPostByHeader(sltdPubPath + "osj/hbos-thirdparty-integration/standard/common/healthcareRecord/dtcQueryHealthcareRecordList", new Gson().toJson(requestParams), headers);
+        String result = HttpUtils.sendPostByHeader(sltdPubPath + "/osj/hbos-thirdparty-integration/standard/common/staff/queryStaffList", new Gson().toJson(requestParams), headers);
         log.info("銆恞ueryHealthcareRecordList銆戞帴鍙e搷搴旂粨鏋滐細{}", result);
         List<Map<String, Object>> dataList = getDataList(result);
         for (Map<String, Object> dataItem : dataList) {
             SysUser sysUser = new SysUser();
+            if (StringUtils.isEmpty(getStringValue(dataItem, "accountNo"))) {
+                continue;
+            }
             sysUser.setUserName(getStringValue(dataItem, "accountNo"));
             sysUser.setNickName(getStringValue(dataItem, "name"));
             List diagnosisObjList = (List<?>) dataItem.get("qualifications");
@@ -86,15 +196,21 @@
                     if (diagnosis instanceof Map) {
                         Map<String, Object> diagnosisMap = (Map<String, Object>) diagnosis;
                         String professionalTitleName = getStringValue(diagnosisMap, "professionalTitleName");
-                        if (professionalTitleName.contains("鍖诲笀")) sysUser.setUserType("鍖荤敓");
-                        if (professionalTitleName.contains("鎶�")) sysUser.setUserType("鎶ゅ+");
+                        if (professionalTitleName.contains("鍖诲笀")) {
+                            sysUser.setUserType("鍖荤敓");
+                            sysUser.setSearchscope("1");
+                        }
+                        if (professionalTitleName.contains("鎶�")) {
+                            sysUser.setUserType("鎶ゅ+");
+                            sysUser.setSearchscope("2");
+                        }
                         sysUser.setTitle(getStringValue(diagnosisMap, "professionalTitleName"));
                     }
                 }
             }
-            sysUser.setDeptCode(getStringValue(dataItem, "accountNo"));
-            sysUser.setDeptName(getStringValue(dataItem, "personnelDeptName"));
+
             sysUser.setPhonenumber(getStringValue(dataItem, "telephone"));
+            sysUser.setUserCode(getStringValue(dataItem, "jobNumber"));
             //璁剧疆鎬у埆
             String genderName = getStringValue(dataItem, "genderName");
             if ("鐢�".equals(genderName)) sysUser.setSex("0");
@@ -105,8 +221,61 @@
             sysUser.setUpdateTime(new Date());
             sysUser.setUpdateBy("admin");
             sysUser.setCreateBy("admin");
+            sysUser.setCreateBy("admin");
+            sysUser.setOrgid(reqVO.getCampusId().toString());
+            BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
+            sysUser.setPassword(passwordEncoder.encode(userPwd));
 
             sysUser2Mapper.insertUser(sysUser);
+
+            // 澶勭悊鐢ㄦ埛涓庨儴闂ㄧ殑鍏崇郴
+            List personnelDepts = (List<?>) dataItem.get("personnelDepts");
+            if (CollectionUtils.isEmpty(personnelDepts)) {
+                continue;
+            }
+
+            List<List<String>> deptInfoList = new ArrayList<>();
+            List<List<String>> hospInfoList = new ArrayList<>();
+            for (Object personnelDept : personnelDepts) {
+                if (personnelDept instanceof Map) {
+                    Map<String, Object> personnelDeptMap = (Map<String, Object>) personnelDept;
+//                    Long hisDeptId = (Long) personnelDeptMap.get("deptId");
+                    String hisDeptId = getStringValue(personnelDeptMap, "deptId");
+                    //鍦ㄨ繖閲岋紝hisDeptId灏辨槸deptCode
+                    SysDept sysDept = sysDeptMapper.selectDeptByCode(hisDeptId, reqVO.getCampusId().toString());
+                    if (Objects.isNull(sysDept)) continue;
+                    SysUserDept sysUserDept = new SysUserDept();
+                    sysUserDept.setUserId(sysUser.getUserId());
+                    sysUserDept.setDeptType(sysDept.getDeptType());
+                    sysUserDept.setDeptId(sysDept.getDeptId());
+                    sysUserDept.setDeptCode(sysDept.getDeptCode());
+                    sysUserDept.setDeptName(sysDept.getDeptName());
+                    sysUserDept.setOrgid(sysDept.getOrgid());
+                    sysUserDept.setCreateTime(new Date());
+                    sysUserDept.setDelFlag(0L);
+                    sysUserDeptMapper.insertSysUserDept(sysUserDept);
+                    if (StringUtils.isNotEmpty(sysDept.getDeptType()) && sysDept.getDeptType().equals("1")) {
+                        hospInfoList.add(Arrays.asList(sysDept.getDeptCode()));
+                    } else if (StringUtils.isNotEmpty(sysDept.getDeptType()) && sysDept.getDeptType().equals("2")) {
+                        deptInfoList.add(Arrays.asList(sysDept.getDeptCode()));
+                    }
+                }
+            }
+            //灏嗛儴闂ㄦ垜鐥呭尯鏀惧埌鎸囧畾瀛楁涓�
+            Gson gson = new Gson();
+            sysUser.setHospInfo(gson.toJson(hospInfoList));
+            sysUser.setDeptInfo(gson.toJson(deptInfoList));
+            sysUser2Mapper.updateUser(sysUser);
+
+            //璁剧疆涓�涓粯璁よ鑹诧紙鍖荤敓瑙掕壊锛�
+            List<SysUserRole> userRoleList = new ArrayList();
+            SysUserRole sur = new SysUserRole();
+            sur.setUserId(sysUser.getUserId());
+            sur.setRoleId(3L);
+            sur.setOrgid(sysUser.getOrgid());
+            userRoleList.add(sur);
+            sysUserRoleMapper.batchUserRole(userRoleList);
+
         }
 
         return true;
@@ -116,7 +285,7 @@
         if (reqVO.getHealthcareRecordTypeList().contains("FH0108.02")) {
             if (reqVO.getStartHeadTime() != null && reqVO.getStartTailTime() != null) {
                 return "0";
-            } else if (reqVO.getPreOutHospitalHeadDate() != null && reqVO.getPreOutHospitalTailDate() != null) {
+            } else if (StringUtils.isNotEmpty(reqVO.getPreOutHospitalHeadDate()) && StringUtils.isNotEmpty(reqVO.getPreOutHospitalTailDate())) {
                 return "1";
             }
         }
@@ -128,14 +297,26 @@
         if (reqVO.getOrgId() != null) {
             params.put("orgId", Long.parseLong(reqVO.getOrgId()));
         }
-        if (reqVO.getCampusIds() != null) {
-            params.put("campusIds", reqVO.getCampusIds());
+        if (reqVO.getCampusId() != null) {
+            params.put("campusId", reqVO.getCampusId());
         }
         if (reqVO.getStartHeadTime() != null) {
             params.put("startHeadTime", reqVO.getStartHeadTime());
         }
         if (reqVO.getStartTailTime() != null) {
             params.put("startTailTime", reqVO.getStartTailTime());
+        }
+        if (reqVO.getEncounterTimeStart() != null) {
+            params.put("encounterTimeStart", reqVO.getEncounterTimeStart());
+        }
+        if (reqVO.getEncounterTimeEnd() != null) {
+            params.put("encounterTimeEnd", reqVO.getEncounterTimeEnd());
+        }
+        if (reqVO.getPreOutHospitalHeadDate() != null) {
+            params.put("preOutHospitalHeadDate", reqVO.getPreOutHospitalHeadDate());
+        }
+        if (reqVO.getPreOutHospitalTailDate() != null) {
+            params.put("preOutHospitalTailDate", reqVO.getPreOutHospitalTailDate());
         }
         if (reqVO.getHealthcareRecordTypeList() != null && !reqVO.getHealthcareRecordTypeList().isEmpty()) {
             params.put("healthcareRecordTypeList", reqVO.getHealthcareRecordTypeList());
@@ -148,7 +329,7 @@
         }
         params.put("serviceScopes", null);
         params.put("inpatientArea", null);
-        params.put("status", reqVO.getStatusList() != null && !reqVO.getStatusList().isEmpty() ? reqVO.getStatusList() : null);
+        params.put("status", reqVO.getStatusList() != null && !reqVO.getStatusList().isEmpty() ? reqVO.getStatusList().get(0) : null);
         return params;
     }
 
@@ -159,7 +340,7 @@
         return headers;
     }
 
-    private List<ServiceSLTDInhospResDTO> parseResponseData(String result, String type, String cry) {
+    private List<ServiceSLTDInhospResDTO> parseResponseData(String result, List<String> types, String cry, Long orgid) {
         try {
 
             List<Map<String, Object>> dataList = getDataList(result);
@@ -169,7 +350,7 @@
             }
             log.info("銆恜arseResponseData銆戞垚鍔熻В鏋恵}鏉″仴搴疯褰曟暟鎹�", resultList.size());
 
-            processResultList(resultList, type, cry);
+            processResultList(resultList, types, cry, orgid);
             return resultList;
         } catch (Exception e) {
             log.error("銆恜arseResponseData銆戣В鏋愬搷搴旀暟鎹紓甯革紝鍝嶅簲鍐呭锛歿}", result, e);
@@ -182,16 +363,16 @@
         Type mapType = new TypeToken<Map<String, Object>>() {
         }.getType();
         Map<String, Object> responseMap = gson.fromJson(result, mapType);
-
-        Number codeObj = (Number) responseMap.get("code");
-        if (codeObj == null || codeObj.intValue() != 200) {
-            log.error("銆恜arseResponseData銆戞帴鍙h繑鍥炲け璐ワ紝鍝嶅簲鐮侊細{}锛屽搷搴斿唴瀹癸細{}", codeObj, result);
-            throw new RuntimeException("鎺ュ彛璋冪敤澶辫触锛屽搷搴旂爜锛�" + codeObj);
+        Number codeNum = (Number) responseMap.get("code");
+        String code = BigDecimal.valueOf(codeNum.longValue()).toPlainString();
+        if (StringUtils.isEmpty(code) || !code.equals("200")) {
+            log.error("銆恜arseResponseData銆戞帴鍙h繑鍥炲け璐ワ紝鍝嶅簲鐮侊細{}锛屽搷搴斿唴瀹癸細{}", code, result);
+            throw new RuntimeException("鎺ュ彛璋冪敤澶辫触锛屽搷搴旂爜锛�" + code);
         }
 
         Object dataObj = responseMap.get("data");
         if (dataObj == null) {
-            log.warn("銆恜arseResponseData銆戞帴鍙h繑鍥炴暟鎹负绌�");
+            log.info("銆恜arseResponseData銆戞帴鍙h繑鍥炴暟鎹负绌�");
             return new ArrayList<>();
         }
 
@@ -202,36 +383,38 @@
         return dataList;
     }
 
-    private void processResultList(List<ServiceSLTDInhospResDTO> resultList, String type, String cry) {
-        switch (type) {
-            case "FH0108.01":
-                log.info("銆恜arseResponseData銆戣В鏋愰棬璇婃暟鎹�");
-                outHospitalDate(resultList);
-                break;
-            case "FH0108.02":
-                log.info("銆恜arseResponseData銆戣В鏋愪綇闄㈡暟鎹�");
-                inHospitalDate(resultList, cry);
-                break;
-            case "FH0108.03":
-                log.info("銆恜arseResponseData銆戣В鏋愭�ヨ瘖鏁版嵁");
-                outHospitalDate(resultList);
-                break;
-            default:
-                log.warn("銆恜arseResponseData銆戞湭鐭ョ殑鏁版嵁绫诲瀷锛歿}", type);
-                break;
-        }
+    private void processResultList(List<ServiceSLTDInhospResDTO> resultList, List<String> types, String cry, Long orgid) {
+        for (String type : types)
+            switch (type) {
+                case "FH0108.01":
+                    log.info("銆恜arseResponseData銆戣В鏋愰棬璇婃暟鎹�");
+                    outHospitalDate(resultList, orgid);
+                    break;
+                case "FH0108.02":
+                    log.info("銆恜arseResponseData銆戣В鏋愪綇闄㈡暟鎹�");
+                    inHospitalDate(resultList, cry, orgid);
+                    break;
+                case "FH0108.03":
+                    log.info("銆恜arseResponseData銆戣В鏋愭�ヨ瘖鏁版嵁");
+                    outHospitalDate(resultList, orgid);
+                    break;
+                default:
+                    log.warn("銆恜arseResponseData銆戞湭鐭ョ殑鏁版嵁绫诲瀷锛歿}", type);
+                    break;
+            }
     }
 
-    private Boolean outHospitalDate(List<ServiceSLTDInhospResDTO> resultList) {
+    private Boolean outHospitalDate(List<ServiceSLTDInhospResDTO> resultList, Long orgid) {
         for (ServiceSLTDInhospResDTO dto : resultList) {
-            PatArchive patArchive = processPatientArchive(dto);
-            PatMedOuthosp patMedOuthosp = buildPatMedOuthosp(dto, patArchive);
+            if (Objects.isNull(dto)) continue;
+            PatArchive patArchive = processPatientArchive(dto, orgid);
+            PatMedOuthosp patMedOuthosp = buildPatMedOuthosp(dto, patArchive, orgid);
             patMedOuthospMapper.insertPatMedOuthosp(patMedOuthosp);
         }
         return true;
     }
 
-    private PatMedOuthosp buildPatMedOuthosp(ServiceSLTDInhospResDTO dto, PatArchive patArchive) {
+    private PatMedOuthosp buildPatMedOuthosp(ServiceSLTDInhospResDTO dto, PatArchive patArchive, Long orgid) {
         PatMedOuthosp patMedOuthosp = new PatMedOuthosp();
         patMedOuthosp.setOuthospno(dto.getHealthcareRecordNo());
         patMedOuthosp.setSerialnum(dto.getHealthcareRecordNo());
@@ -249,10 +432,14 @@
         patMedOuthosp.setMainsuit(dto.getDiagnosisName());
         patMedOuthosp.setHpi(null);
         patMedOuthosp.setCreateTime(new Date());
+        patMedOuthosp.setOrgid("" + orgid);
         return patMedOuthosp;
     }
 
     private Date parseDate(String dateStr) {
+        if (StringUtils.isEmpty(dateStr)) {
+            return null;
+        }
         try {
             return new SimpleDateFormat(DATE_FORMAT).parse(dateStr);
         } catch (ParseException e) {
@@ -261,21 +448,25 @@
         }
     }
 
-    private Boolean inHospitalDate(List<ServiceSLTDInhospResDTO> resultList, String cry) {
+    private Boolean inHospitalDate(List<ServiceSLTDInhospResDTO> resultList, String cry, Long orgid) {
         for (ServiceSLTDInhospResDTO dto : resultList) {
-            PatArchive patArchive = processPatientArchive(dto);
-            processPatientInhospInfo(dto, patArchive, cry);
+            if (Objects.isNull(dto)) continue;
+            PatArchive patArchive = processPatientArchive(dto, orgid);
+            processPatientInhospInfo(dto, patArchive, cry, orgid);
         }
         return true;
     }
 
-    private void processPatientInhospInfo(ServiceSLTDInhospResDTO dto, PatArchive patArchive, String cry) {
-        PatMedInhosp patMedInhosp = buildPatientInhospInfo(dto, patArchive, cry);
+    private void processPatientInhospInfo(ServiceSLTDInhospResDTO dto, PatArchive patArchive, String cry, Long orgid) {
+        PatMedInhosp patMedInhosp = buildPatientInhospInfo(dto, patArchive, cry, orgid);
         PatMedInhosp queryInhosp = new PatMedInhosp();
         queryInhosp.setPatno(patArchive.getPatientno());
         queryInhosp.setSerialnum(patMedInhosp.getSerialnum());
+        queryInhosp.setOrgid("" + orgid);
+        log.info("----------------杩欓噷鐨勫叆鍙備负锛歿}", queryInhosp);
         List<PatMedInhosp> existingInhosps = patMedInhospService.selectPatMedInhospList(queryInhosp);
 
+        log.info("----------------杩欓噷鐨勮繑鍙備负锛歿}", existingInhosps);
         if (CollectionUtils.isNotEmpty(existingInhosps)) {
             patMedInhosp.setInhospid(existingInhosps.get(0).getInhospid());
             patMedInhospService.updatePatMedInhosp(patMedInhosp);
@@ -286,7 +477,8 @@
         }
     }
 
-    private PatMedInhosp buildPatientInhospInfo(ServiceSLTDInhospResDTO dto, PatArchive patArchive, String cry) {
+    private PatMedInhosp buildPatientInhospInfo(ServiceSLTDInhospResDTO dto, PatArchive patArchive, String cry, Long orgid) {
+        log.info("----------------buildPatientInhospInfo杩欓噷杩涙潵浜嗗悧锛焮}", cry);
         PatMedInhosp patMedInhosp = new PatMedInhosp();
         patMedInhosp.setPatid(patArchive.getId());
         patMedInhosp.setPatno(patArchive.getPatientno());
@@ -295,7 +487,8 @@
         patMedInhosp.setNurseName(dto.getChiefNurseName());
         patMedInhosp.setSerialnum(dto.getHealthcareRecordNo());
         patMedInhosp.setFuflag("1");
-        patMedInhosp.setInhospstate("0".equals(cry) ? "0" : "1");
+        if ("0".equals(cry)) patMedInhosp.setInhospstate("0");
+        if ("1".equals(cry)) patMedInhosp.setInhospstate("1");
         patMedInhosp.setHospitalcode(dto.getOrgId());
         patMedInhosp.setBedNo(dto.getBedNumber());
         patMedInhosp.setStarttime(parseDate(dto.getStartTime()));
@@ -311,7 +504,7 @@
         patMedInhosp.setDrcode("" + dto.getDoctorId());
         patMedInhosp.setSchemestatus("0".equals(cry) ? 1L : 2L);
         patMedInhosp.setDelFlag("0");
-        patMedInhosp.setOrgid("1");
+        patMedInhosp.setOrgid("" + orgid);
         return patMedInhosp;
     }
 
@@ -338,12 +531,12 @@
         patMedInhosp.setHospitaldistrictname(dto.getAreaName());
     }
 
-    private PatArchive processPatientArchive(ServiceSLTDInhospResDTO dto) {
+    private PatArchive processPatientArchive(ServiceSLTDInhospResDTO dto, Long orgid) {
         PatArchive queryArchive = new PatArchive();
-        queryArchive.setIdcardno(dto.getIdCardNo().trim());
+        queryArchive.setIdcardno(StringUtils.isEmpty(dto.getIdCardNo()) ? "" + dto.getMedicalCardId() : dto.getIdCardNo().trim());
         List<PatArchive> existingArchives = patArchiveService.selectPatArchiveList(queryArchive);
 
-        PatArchive patArchive = buildPatientArchive(dto);
+        PatArchive patArchive = buildPatientArchive(dto, orgid);
 
         if (CollectionUtils.isEmpty(existingArchives)) {
             patArchiveService.insertPatArchive(patArchive);
@@ -357,10 +550,10 @@
         return patArchive;
     }
 
-    private PatArchive buildPatientArchive(ServiceSLTDInhospResDTO dto) {
+    private PatArchive buildPatientArchive(ServiceSLTDInhospResDTO dto, Long orgid) {
         PatArchive patArchive = new PatArchive();
-        patArchive.setPatientno(dto.getMedicalRecordNo());
-        patArchive.setIdcardno(dto.getIdCardNo().trim());
+        patArchive.setPatientno("" + dto.getPatientId());
+        patArchive.setIdcardno(StringUtils.isEmpty(dto.getIdCardNo()) ? "" + dto.getMedicalCardId() : dto.getIdCardNo().trim());
         patArchive.setName(dto.getPatientName());
         patArchive.setSourcefrom(2);
         patArchive.setPattype("2");
@@ -376,6 +569,7 @@
         patArchive.setDelFlag("0");
         patArchive.setCreateTime(new Date());
         patArchive.setUpdateTime(new Date());
+        patArchive.setOrgid("" + orgid);
         return patArchive;
     }
 
@@ -485,7 +679,12 @@
 
     private String getStringValue(Map<String, Object> map, String key) {
         Object value = map.get(key);
-        return value != null ? value.toString() : null;
+        if (value == null) {
+            return null;
+        }
+
+        // 鍙鐞嗘暟瀛楃被鍨嬶紝閬垮厤绉戝璁℃暟娉�
+        return value instanceof Number ? new BigDecimal(value.toString()).toPlainString() : value.toString();
     }
 
     private Long getLongValue(Map<String, Object> map, String key) {
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 aa9a70c..799fd20 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java
@@ -1,17 +1,12 @@
 package com.smartor.service.impl;
 
-import afu.org.checkerframework.checker.oigj.qual.O;
-import com.alibaba.fastjson2.JSON;
 import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.DtoConversionUtils;
 import com.ruoyi.common.utils.RSAPublicKeyExample;
 import com.ruoyi.common.utils.StringUtils;
 import com.smartor.domain.*;
-import com.smartor.mapper.ServiceSubtaskAnswerMapper;
-import com.smartor.mapper.ServiceSubtaskDetailMapper;
-import com.smartor.mapper.ServiceSubtaskMapper;
-import com.smartor.mapper.SvyTaskTemplateTargetoptionMapper;
+import com.smartor.mapper.*;
 import com.smartor.service.IServiceSubtaskAnswerService;
 import com.smartor.service.IServiceTaskService;
 import lombok.extern.slf4j.Slf4j;
@@ -23,7 +18,6 @@
 
 import java.math.BigDecimal;
 import java.util.*;
-import java.util.concurrent.TimeUnit;
 
 /**
  * 浠诲姟闂嵎闂閫夐」Service涓氬姟灞傚鐞�
@@ -41,6 +35,9 @@
     private ServiceSubtaskMapper serviceSubtaskMapper;
 
     @Autowired
+    private ServiceSubtaskPreachformMapper serviceSubtaskPreachformMapper;
+
+    @Autowired
     private RedisCache redisCache;
 
     @Autowired
@@ -50,10 +47,20 @@
     private IServiceTaskService serviceTaskService;
 
     @Autowired
-    private SvyTaskTemplateTargetoptionMapper svyTaskTemplateTargetoptionMapper;
+    private PatArchiveMapper patArchiveMapper;
+
+
+    @Autowired
+    private PatMedInhospMapper patMedInhospMapper;
+
+    @Autowired
+    private PatMedOuthospMapper patMedOuthospMapper;
 
     @Value("${pri_key}")
     private String pri_key;
+
+    @Value("${dealDeptCode}")
+    private String dealDeptCode;
 
     /**
      * 鏌ヨ浠诲姟闂嵎闂閫夐」
@@ -129,6 +136,7 @@
         Long tid = null;
         Long pid = null;
         Double score = null;
+        Long isabno = 0L;
         Set<String> allKeys = redisCache.getAllKeys();
         if (ObjectUtils.isNotEmpty(serviceSubTaskAnswerReq)) {
             //闇�瑕佺珛鍗虫墽琛�
@@ -179,7 +187,8 @@
                                 svyTaskTemplateScriptVO.setSvyTaskTemplateTargetoptions(svyTaskTemplateTargetoptions);
                                 Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, tid, pid);
                                 if (map == null) continue aa;
-                                nextScriptno = Long.valueOf(map.get("nextScriptNo"));
+                                if (!Objects.isNull(map.get("nextScriptNo")))
+                                    nextScriptno = Long.valueOf(map.get("nextScriptNo"));
                                 if (score == null) {
                                     score = Double.valueOf(map.get("score"));
                                 } else {
@@ -197,7 +206,8 @@
                             log.error("svyTaskTemplateScriptVO鐨勫�间负锛歿}", svyTaskTemplateScriptVO);
                             Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, Long.valueOf(split[1]), Long.valueOf(split[0]));
                             log.error("map鐨勪俊鎭负锛歿}", map);
-                            nextScriptno = Long.valueOf(map.get("nextScriptNo"));
+                            if (!Objects.isNull(map.get("nextScriptNo")))
+                                nextScriptno = Long.valueOf(map.get("nextScriptNo"));
                             if (score == null) {
                                 score = Double.valueOf(map.get("score"));
                             } else {
@@ -221,7 +231,8 @@
                                 List<IvrTaskTemplateTargetoption> ivrTaskTemplateTargetoptions = DtoConversionUtils.sourceToTarget(ivrLibaTemplateTargetoptions, IvrTaskTemplateTargetoption.class);
                                 ivrTaskTemplateScriptVO.setIvrTaskScriptTargetoptionList(ivrTaskTemplateTargetoptions);
                                 Map<String, String> map = setSFInfo(ivrTaskTemplateScriptVO, tid, pid);
-                                nextScriptno = Long.valueOf(map.get("nextScriptNo"));
+                                if (!Objects.isNull(map.get("nextScriptNo")))
+                                    nextScriptno = Long.valueOf(map.get("nextScriptNo"));
                                 if (score == null) {
                                     score = Double.valueOf(map.get("score"));
                                 } else {
@@ -238,7 +249,8 @@
                         if (ivrTaskTemplateScriptVO.getSort() != null && Long.valueOf(ivrTaskTemplateScriptVO.getSort()).equals(nextScriptno)) {
                             Map<String, String> map = setSFInfo(ivrTaskTemplateScriptVO, Long.valueOf(split[1]), Long.valueOf(split[0]));
                             log.error("map鐨勪俊鎭负锛歿}", map);
-                            nextScriptno = Long.valueOf(map.get("nextScriptNo"));
+                            if (!Objects.isNull(map.get("nextScriptNo")))
+                                nextScriptno = Long.valueOf(map.get("nextScriptNo"));
                             if (score == null) {
                                 score = Double.valueOf(map.get("score"));
                             } else {
@@ -252,6 +264,14 @@
             }
             //灏嗚key鍜寁alue浠巖edis涓紝鍒犻櫎
             redisCache.deleteObject(key);
+
+            //鏌ヨ鍑鸿浠诲姟涓鍦ㄦ墽琛岀殑鎮h�呬俊鎭�
+            ServiceSubtaskVO ssVO = new ServiceSubtaskVO();
+            ssVO.setTaskid(tid);
+            ssVO.setPatid(pid);
+            ssVO.setSendstate(3L);
+            List<ServiceSubtask> serviceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(ssVO);
+
             ServiceSubtask serviceSubtask = new ServiceSubtask();
             serviceSubtask.setTaskid(tid);
             serviceSubtask.setPatid(pid);
@@ -263,8 +283,186 @@
             log.error("灏嗚key鍜寁alue浠巖edis涓�,serviceSubtask鐨勫�间负--------锛歿}", serviceSubtask);
             if (score != null) serviceSubtask.setScore(BigDecimal.valueOf(score));
             serviceSubtaskMapper.updateServiceSubtaskByCondition(serviceSubtask);
+
+            //灏嗗綋鍓嶅彂閫佺姸鎬佹敼鎴�9瀹屾垚
+            ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform();
+            serviceSubtaskPreachform.setPreachform(serviceSubtaskList.get(0).getCurrentPreachform());
+            serviceSubtaskPreachform.setSubid(serviceSubtask.getId());
+            serviceSubtaskPreachform.setTaskid(serviceSubtask.getTaskid());
+            List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
+            if (CollectionUtils.isNotEmpty(serviceSubtaskPreachforms)) {
+                ServiceSubtaskPreachform ssp = serviceSubtaskPreachforms.get(0);
+                ssp.setSendstate("9");
+                serviceSubtaskPreachformMapper.updateServiceSubtaskPreachform(ssp);
+            }
+
         }
         return 1;
+    }
+
+    @Override
+    public Boolean saveMYDQuestionAnswer(ServiceSubTaskMYDAnswerReq serviceSubTaskMYDAnswerReq) {
+        //鐢ㄦ潵澶勭悊鎶曡瘔寤鸿鐨勯儴闂�
+        String dealDept = null;
+
+        Long patid = null;
+        List<PatMedInhosp> patMedInhospList = null;
+        List<PatMedOuthosp> patMedOuthosps = null;
+        List<Long> idList = new ArrayList<>();
+        if (serviceSubTaskMYDAnswerReq.getMzzy().equals("1")) {
+            //浣忛櫌
+            PatMedInhosp patMedInhosp = new PatMedInhosp();
+            patMedInhosp.setSerialnum(serviceSubTaskMYDAnswerReq.getSerialnum());
+            patMedInhospList = patMedInhospMapper.selectPatMedInhospList(patMedInhosp);
+            if (CollectionUtils.isNotEmpty(patMedInhospList)) patid = patMedInhospList.get(0).getPatid();
+        } else if (serviceSubTaskMYDAnswerReq.getMzzy().equals("2")) {
+            //闂ㄨ瘖
+            PatMedOuthosp patMedOuthosp = new PatMedOuthosp();
+            patMedOuthosp.setSerialnum(serviceSubTaskMYDAnswerReq.getSerialnum());
+            patMedOuthosps = patMedOuthospMapper.selectPatMedOuthospList(patMedOuthosp);
+            if (CollectionUtils.isNotEmpty(patMedOuthosps)) patid = patMedOuthosps.get(0).getPatid();
+        } else if (serviceSubTaskMYDAnswerReq.getMzzy().equals("3")) {
+            //鎸囧畾涓�涓儴闂紝鐢ㄦ潵澶勭悊鎶曡瘔寤鸿
+            dealDept = dealDeptCode;
+            String serialnum = serviceSubTaskMYDAnswerReq.getSerialnum();
+            PatArchive patArchive = new PatArchive();
+            patArchive.setPatientno(serialnum);
+            List<PatArchive> patArchives = patArchiveMapper.selectPatArchiveList(patArchive);
+            if (CollectionUtils.isNotEmpty(patArchives)) {
+                patid = patArchives.get(0).getId();
+            }
+        }
+
+        if (CollectionUtils.isNotEmpty(serviceSubTaskMYDAnswerReq.getSvyLibTemplateScriptVOS())) {
+            Double score = null;
+            List<SvyLibTemplateScriptVO> svyLibTemplateScriptVOS = serviceSubTaskMYDAnswerReq.getSvyLibTemplateScriptVOS();
+            Long nextScriptno = null;
+            for (int i = 0; i < svyLibTemplateScriptVOS.size(); i++) {
+                if (i == 0) {
+                    //杩欎釜鏃堕棿瑕佹壘鍒扮涓�棰�
+                    for (SvyLibTemplateScriptVO svyLibTemplateScriptVO : svyLibTemplateScriptVOS) {
+                        if (svyLibTemplateScriptVO.getSort() == 1L) {
+                            //璇存槑鏄涓�棰�
+                            SvyTaskTemplateScriptVO svyTaskTemplateScriptVO = DtoConversionUtils.sourceToTarget(svyLibTemplateScriptVOS.get(0), SvyTaskTemplateScriptVO.class);
+                            List<SvyLibTemplateTargetoption> svyLibTemplateTargetoptions = svyLibTemplateScriptVOS.get(0).getSvyLibTemplateTargetoptions();
+                            List<SvyTaskTemplateTargetoption> svyTaskTemplateTargetoptions = DtoConversionUtils.sourceToTarget(svyLibTemplateTargetoptions, SvyTaskTemplateTargetoption.class);
+                            svyTaskTemplateScriptVO.setSvyTaskTemplateTargetoptions(svyTaskTemplateTargetoptions);
+                            Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, Long.valueOf(serviceSubTaskMYDAnswerReq.getTaskId()), patid);
+                            if (map == null) continue;
+                            if (!Objects.isNull(map.get("nextScriptNo")))
+                                nextScriptno = Long.valueOf(map.get("nextScriptNo"));
+                            if (score == null) {
+                                score = Double.valueOf(map.get("score"));
+                            } else {
+                                score = score + Double.valueOf(map.get("score"));
+                            }
+                            if (!Objects.isNull(map.get("id"))) {
+                                idList.add(Long.valueOf(map.get("id")));
+                            }
+                        }
+                    }
+
+                } else {
+                    SvyTaskTemplateScriptVO svyTaskTemplateScriptVO = DtoConversionUtils.sourceToTarget(svyLibTemplateScriptVOS.get(i), SvyTaskTemplateScriptVO.class);
+                    List<SvyTaskTemplateTargetoption> svyTaskTemplateTargetoptions = DtoConversionUtils.sourceToTarget(svyLibTemplateScriptVOS.get(i).getSvyLibTemplateTargetoptions(), SvyTaskTemplateTargetoption.class);
+                    svyTaskTemplateScriptVO.setSvyTaskTemplateTargetoptions(svyTaskTemplateTargetoptions);
+
+                    if (svyTaskTemplateScriptVO.getSort() != null && svyTaskTemplateScriptVO.getSort().equals(nextScriptno)) {
+                        log.error("svyTaskTemplateScriptVO鐨勫�间负锛歿}", svyTaskTemplateScriptVO);
+                        Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, Long.valueOf(serviceSubTaskMYDAnswerReq.getTaskId()), patid);
+                        log.error("map鐨勪俊鎭负锛歿}", map);
+                        if (!Objects.isNull(map.get("nextScriptNo")))
+                            nextScriptno = Long.valueOf(map.get("nextScriptNo"));
+                        if (score == null) {
+                            score = Double.valueOf(map.get("score"));
+                        } else {
+                            score = score + Double.valueOf(map.get("score"));
+                        }
+                        if (!Objects.isNull(map.get("id"))) {
+                            idList.add(Long.valueOf(map.get("id")));
+                        }
+                    }
+                }
+            }
+            ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(Long.valueOf(serviceSubTaskMYDAnswerReq.getTaskId()));
+            PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patid);
+
+            if (!Objects.isNull(serviceTask)) {
+                ServiceSubtask serviceSubtask = new ServiceSubtask();
+                serviceSubtask.setTaskid(serviceTask.getTaskid());
+                serviceSubtask.setTaskName(serviceTask.getTaskName());
+                serviceSubtask.setTaskDesc(serviceTask.getTaskDesc());
+                serviceSubtask.setTemplateid(serviceTask.getTemplateid());
+                serviceSubtask.setTemplatename(serviceTask.getTemplatename());
+                serviceSubtask.setLibtemplateid(Long.valueOf(serviceTask.getLibtemplateid()));
+                if (CollectionUtils.isNotEmpty(patMedInhospList)) {
+                    serviceSubtask.setHospType("2");
+                    serviceSubtask.setDeptname(patMedInhospList.get(0).getDeptname());
+                    serviceSubtask.setDeptcode(patMedInhospList.get(0).getDeptcode());
+                    serviceSubtask.setLeavehospitaldistrictcode(patMedInhospList.get(0).getLeavehospitaldistrictcode());
+                    serviceSubtask.setLeavehospitaldistrictname(patMedInhospList.get(0).getLeavehospitaldistrictname());
+                    serviceSubtask.setDrname(patMedInhospList.get(0).getDrname());
+                    serviceSubtask.setDrcode(patMedInhospList.get(0).getDrcode());
+                    serviceSubtask.setNurseName(patMedInhospList.get(0).getNurseName());
+                    serviceSubtask.setNurseId(patMedInhospList.get(0).getNurseId());
+                    serviceSubtask.setInhospid(patMedInhospList.get(0).getInhospid());
+                    serviceSubtask.setServiceType("6");
+                } else if (CollectionUtils.isNotEmpty(patMedOuthosps)) {
+                    serviceSubtask.setHospType("1");
+                    serviceSubtask.setAdmindate(patMedOuthosps.get(0).getAdmitdate());
+                    serviceSubtask.setHospno(patMedOuthosps.get(0).getOuthospno());
+                    serviceSubtask.setDeptname(patMedOuthosps.get(0).getDeptname());
+                    serviceSubtask.setDeptcode(patMedOuthosps.get(0).getDeptcode());
+                    serviceSubtask.setDrname(patMedOuthosps.get(0).getDrname());
+                    serviceSubtask.setDrcode(patMedOuthosps.get(0).getDrcode());
+                    serviceSubtask.setServiceType("14");
+                }
+                if (!Objects.isNull(patArchive)) {
+                    serviceSubtask.setPatid(patArchive.getId());
+                    serviceSubtask.setSendname(patArchive.getName());
+                    serviceSubtask.setSex(patArchive.getSex());
+                    serviceSubtask.setPhone(patArchive.getTelcode());
+                    serviceSubtask.setSfzh(patArchive.getIdcardno());
+                    serviceSubtask.setAddr(patArchive.getPlaceOfResidence());
+                    serviceSubtask.setOrgid(patArchive.getOrgid());
+                }
+                if (StringUtils.isNotEmpty(dealDept)) {
+                    //鎶曡瘔寤鸿鐨勫鐞嗛儴闂�
+                    serviceSubtask.setDeptcode(dealDept);
+                    serviceSubtask.setServiceType("15");
+                }
+                serviceSubtask.setSubmit(1L);
+                serviceSubtask.setSendstate(6L);
+                serviceSubtask.setType("2");
+                serviceSubtask.setExcep(null);
+                serviceSubtask.setFinishtime(new Date());
+                serviceSubtask.setUpdateTime(new Date());
+                serviceSubtask.setCreateTime(new Date());
+                serviceSubtask.setVisitTime(new Date());
+                if (score != null) serviceSubtask.setScore(BigDecimal.valueOf(score));
+                serviceSubtaskMapper.insertServiceSubtask(serviceSubtask);
+                //灏嗗綋鍓嶅彂閫佺姸鎬佹敼鎴�9瀹屾垚
+                ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform();
+                serviceSubtaskPreachform.setPreachform(serviceSubtask.getCurrentPreachform());
+                serviceSubtaskPreachform.setSubid(serviceSubtask.getId());
+                serviceSubtaskPreachform.setTaskid(serviceSubtask.getTaskid());
+                List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
+                if (CollectionUtils.isNotEmpty(serviceSubtaskPreachforms)) {
+                    ServiceSubtaskPreachform ssp = serviceSubtaskPreachforms.get(0);
+                    ssp.setSendstate("9");
+                    serviceSubtaskPreachformMapper.updateServiceSubtaskPreachform(ssp);
+                }
+
+                for (Long detailId : idList) {
+                    ServiceSubtaskDetail serviceSubtaskDetail = new ServiceSubtaskDetail();
+                    serviceSubtaskDetail.setId(detailId);
+                    serviceSubtaskDetail.setSubId(serviceSubtask.getId());
+                    serviceSubtaskDetailMapper.updateServiceSubtaskDetail(serviceSubtaskDetail);
+                }
+            }
+        }
+
+        return true;
     }
 
 
@@ -287,7 +485,7 @@
                 tid = Long.valueOf(serviceSubTaskCacheReq.getParam1());
                 pid = Long.valueOf(serviceSubTaskCacheReq.getParam2());
             }
-            if (CollectionUtils.isNotEmpty(serviceSubTaskCacheReq.getSvyLibTemplateScriptVOS()) &&  serviceSubTaskCacheReq.getSvyLibTemplateScriptVOS().size() > 0) {
+            if (CollectionUtils.isNotEmpty(serviceSubTaskCacheReq.getSvyLibTemplateScriptVOS()) && serviceSubTaskCacheReq.getSvyLibTemplateScriptVOS().size() > 0) {
                 //闂嵎
                 redisCache.deleteObject(pid + "-" + tid + "-WJscriptCache");
                 redisCache.setCacheListRight(pid + "-" + tid + "-WJscriptCache", serviceSubTaskCacheReq.getSvyLibTemplateScriptVOS());
@@ -428,7 +626,7 @@
         List<ServiceSubtaskDetail> serviceSubtaskDetails = serviceSubtaskDetailMapper.selectServiceSubtaskDetailList(serviceSubtaskDetail);
         if (CollectionUtils.isNotEmpty(serviceSubtaskDetails)) {
             map.put("asrtext", serviceSubtaskDetails.get(0).getAsrtext());
-            map.put("asrtextId", serviceSubtaskDetails.get(0).getId());
+            map.put("asrtextId", "" + serviceSubtaskDetails.get(0).getId());
             map.put("answerps", serviceSubtaskDetails.get(0).getAnswerps());
             return map;
         }
@@ -440,7 +638,6 @@
         serviceSubtaskVO.setTaskid(taskid);
         serviceSubtaskVO.setPatid(patid);
         List<ServiceSubtask> selectServiceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO);
-
         String score = "0";
         //涓嬮璺宠浆
         String nextScriptNo = null;
@@ -455,35 +652,15 @@
                 } else {
                     serviceSubtaskDetailVO.setTargetvalue(serviceSubtaskDetailVO.getTargetvalue() + "&" + svyTaskTemplateTargetoption.getOptioncontent());
                 }
-//                if (svyTaskTemplateTargetoption.getIsUserOperation() == true) {
-//                    //灏嗛�変腑鐨勭粨鏋滄斁鍒癮srtext涓�
-//                    if (StringUtils.isEmpty(serviceSubtaskDetailVO.getAsrtext())) {
-//                        //鍜屽墠绔晢閲忥紝鍓嶇浼氬皢閫変腑鐨勭粨鏋滄洿鏂板埌闂涓�
-////                        serviceSubtaskDetailVO.setAsrtext(svyTaskTemplateTargetoption.getTargetvalue());
-//                        serviceSubtaskDetailVO.setAsrtext(svyTaskTemplateScriptVO.getScriptResult());
-//                    } else {
-//                        //濡傛灉鏄閫夛紝绛旀闇�瑕佺敤 & 杩涜鎷兼帴(//鍜屽墠绔晢閲忥紝鍓嶇浼氬皢閫変腑鐨勭粨鏋滄洿鏂板埌闂涓�)
-////                        serviceSubtaskDetailVO.setAsrtext(serviceSubtaskDetailVO.getAnswerps() + "&" + svyTaskTemplateTargetoption.getTargetvalue());
-//                        serviceSubtaskDetailVO.setAsrtext(svyTaskTemplateScriptVO.getScriptResult());
-//                    }
-//                    if (svyTaskTemplateScriptVO.getScriptType().equals("1") && svyTaskTemplateScriptVO.getBranchFlag().equals("1")) {
-//                        //鏄崟閫夛紝骞朵笖鏄湁鍒嗘敮鐨�(鍜屽墠绔晢閲忥紝鍦ㄥ閾剧粨鏋滀繚瀛樻椂锛屼細灏嗛�変腑鐨勯�夐」涓婄殑璺宠浆鏇存柊鍒伴鐩笂)
-////                        nextScriptNo = svyTaskTemplateTargetoption.getNextQuestion().toString();
-//                        nextScriptNo = svyTaskTemplateScriptVO.getNextScriptno().toString();
-//                        score = svyTaskTemplateTargetoption.getScore().toString();
-//                    } else {
-//                        nextScriptNo = svyTaskTemplateScriptVO.getNextScriptno().toString();
-//                        score = svyTaskTemplateScriptVO.getScore().toString();
-//                    }
-//                }
+
             }
-            nextScriptNo = svyTaskTemplateScriptVO.getNextScriptno().toString();
+            nextScriptNo = svyTaskTemplateScriptVO.getNextScriptno();
             if (svyTaskTemplateScriptVO.getScore() != null) {
                 score = String.valueOf(svyTaskTemplateScriptVO.getScore());
             }
             serviceSubtaskDetailVO.setAsrtext(StringUtils.isEmpty(svyTaskTemplateScriptVO.getScriptResult()) ? "" : svyTaskTemplateScriptVO.getScriptResult().replaceAll("^\"|\"$", ""));
             serviceSubtaskDetailVO.setMatchedtext(StringUtils.isEmpty(svyTaskTemplateScriptVO.getScriptResult()) ? "" : svyTaskTemplateScriptVO.getScriptResult().replaceAll("^\"|\"$", ""));
-//            if (StringUtils.isEmpty(serviceSubtaskDetailVO.getAsrtext())) {
+            //            if (StringUtils.isEmpty(serviceSubtaskDetailVO.getAsrtext())) {
 //                nextScriptNo = svyTaskTemplateScriptVO.getNextScriptno().toString();
 //            }
 //            serviceSubtaskDetailVO.setSvyTaskTemplateTargetoptions(svyTaskTemplateScriptVO.getSvyTaskTemplateTargetoptions());
@@ -520,6 +697,7 @@
         Map<String, String> map = new HashMap<>();
         map.put("nextScriptNo", nextScriptNo);
         map.put("score", score);
+        map.put("id", "" + serviceSubtaskDetail.getId());
         return map;
     }
 
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 92b45c6..66e6364 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
@@ -1,6 +1,7 @@
 package com.smartor.service.impl;
 
 import com.alibaba.fastjson2.JSON;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.gson.Gson;
@@ -48,6 +49,9 @@
 public class ServiceSubtaskServiceImpl implements IServiceSubtaskService {
     @Autowired
     private ServiceSubtaskMapper serviceSubtaskMapper;
+
+    @Autowired
+    private ServiceSubtaskPreachformMapper serviceSubtaskPreachformMapper;
 
     @Autowired
     private ServiceSubtaskDetailMapper serviceSubtaskDetailMapper;
@@ -173,7 +177,6 @@
             return DtoConversionUtils.sourceToTarget(serviceTask, ServiceTaskVO.class);
         }
 
-
         //灏嗘煡鍑烘潵鐨勬暟鎹�掑叆ServiceSubtaskVO涓�
         ServiceTaskVO serviceTaskVO = DtoConversionUtils.sourceToTarget(serviceTask, ServiceTaskVO.class);
         serviceTaskVO.setShowDate(serviceTask.getShowDate());
@@ -253,6 +256,14 @@
                 patTaskRelevance.setNurseName(serviceSubtask1.getNurseName());
                 patTaskRelevances.add(patTaskRelevance);
             }
+
+            //鑾峰彇璇ユ偅鑰呮墍鏈夌殑鎵ц鐘舵��
+            ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform();
+            serviceSubtaskPreachform.setTaskid(serviceTask.getTaskid());
+            serviceSubtaskPreachform.setSubid(serviceSubtask1.getId());
+            List<ServiceSubtaskPreachform> serviceSubtaskPreachformList = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
+            serviceTaskVO.setPreachformList(serviceSubtaskPreachformList);
+
         }
 
         serviceTaskVO.setPatTaskRelevances(patTaskRelevances);
@@ -297,7 +308,8 @@
             if (serviceSubtask.getSendstate() >= 3L || serviceSubtask.getSendstate() == 1L) yfs = yfs + 1;
             if (serviceSubtask.getSendstate() == 2L) dsf = dsf + 1;
             if (serviceSubtask.getSendstate() == 1L) blq = blq + 1;
-            if (serviceSubtask.getExcep().equals("1")) yc = yc + 1;
+            if (StringUtils.isNotEmpty(serviceSubtask.getExcep()) && !serviceSubtask.getExcep().equals("0"))
+                yc = yc + 1;
         }
         map.put("wzx", wzx);
         map.put("ysf", ysf);
@@ -414,6 +426,16 @@
             throw new BaseException("浠诲姟鍏ュ弬涓虹┖锛岃妫�鏌ュ叆鍙�");
         }
         ServiceTask serviceTask = DtoConversionUtils.sourceToTarget(serviceTaskVO, ServiceTask.class);
+        if (CollectionUtils.isEmpty(serviceTaskVO.getPreachformList())) throw new BaseException("浠诲姟鐨勫彂閫佹柟寮忎负绌�");
+        //灏唒reachfromList鏀惧埌serviceTask涓殑preachfrom涓�
+        ObjectMapper mapper = new ObjectMapper();
+        try {
+            String preachformList = mapper.writeValueAsString(serviceTaskVO.getPreachformList());
+            serviceTask.setPreachform(preachformList);
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+        }
+
         serviceTask.setTextParam(JSON.toJSONString(serviceTaskVO.getTextParam()));
         if (serviceTaskVO.getIsoperation() != null && serviceTaskVO.getIsoperation() == 1) {
             //鏂板妯℃澘淇℃伅
@@ -460,7 +482,7 @@
                     ServiceTaskdiag serviceTaskdiag = new ServiceTaskdiag();
                     serviceTaskdiag.setTaskId(serviceTask.getTaskid());
                     serviceTaskdiag.setTaskName(serviceTask.getTaskName());
-                    serviceTaskdiag.setLongtask(0L);
+                    serviceTaskdiag.setLongtask(Long.valueOf(serviceTask.getLongTask()));
                     if (serviceTaskVO.getLongTask() == 1) serviceTaskdiag.setLongtask(1L);
                     serviceTaskdiag.setIcd10code(serviceTaskVO.getIcd10code());
                     serviceTaskdiag.setIcd10name(serviceTaskVO.getIcd10name());
@@ -481,11 +503,10 @@
                     serviceTaskoper.setOpdesc(serviceTaskVO.getOpdesc());
                     serviceTaskoper.setTaskId(serviceTask.getTaskid());
                     serviceTaskoper.setTaskName(serviceTask.getTaskName());
-                    serviceTaskoper.setLongtask(0L);
+                    serviceTaskoper.setLongtask(Long.valueOf(serviceTask.getLongTask()));
                     serviceTaskoper.setGuid(serviceTask.getGuid());
                     serviceTaskoper.setOrgid(serviceTask.getOrgid());
                     serviceTaskoper.setCreateTime(new Date());
-                    if (serviceTaskVO.getLongTask() == 1) serviceTaskoper.setLongtask(1L);
                     if (StringUtils.isNotEmpty(serviceTaskVO.getOpcode())) {
                         String[] opcodes = serviceTaskVO.getOpcode().split(",");
                         for (String opcode : opcodes) {
@@ -500,8 +521,7 @@
                     serviceTaskdept.setTaskId(serviceTask.getTaskid());
                     serviceTaskdept.setTaskName(serviceTask.getTaskName());
                     serviceTaskdept.setOrgid(serviceTask.getOrgid());
-                    serviceTaskdept.setLongtask(0L);
-                    if (serviceTaskVO.getLongTask() == 1) serviceTaskdept.setLongtask(1L);
+                    serviceTaskdept.setLongtask(Long.valueOf(serviceTaskVO.getLongTask()));
                     if (StringUtils.isNotEmpty(serviceTaskVO.getDeptcode())) {
                         String[] deptcodes = serviceTaskVO.getDeptcode().split(",");
                         for (String deptCode : deptcodes) {
@@ -522,11 +542,12 @@
                     }
                 }
             }
-            if (serviceTaskVO.getLongTask() != null && serviceTaskVO.getLongTask() == 1 && serviceTaskVO.getPatCycle() == 0L) {
-                Map<String, Integer> map = new HashMap<>();
-                map.put("taskId", serviceTask.getTaskid().intValue());
-                return map;
-            }
+//闀挎湡浠诲姟锛屼篃鍏佽鍔犱汉浜�
+//            if (serviceTaskVO.getLongTask() != null && serviceTaskVO.getLongTask() == 1 && serviceTaskVO.getPatCycle() == 0L) {
+//                Map<String, Integer> map = new HashMap<>();
+//                map.put("taskId", serviceTask.getTaskid().intValue());
+//                return map;
+//            }
 
             //灏嗕换鍔′俊鎭斁鍒版湇鍔¤〃涓�
             ServiceSubtask serviceSubtask = DtoConversionUtils.sourceToTarget(serviceTaskVO, ServiceSubtask.class);
@@ -565,11 +586,25 @@
                     serviceSubtask.setNurseName(patTaskRelevance.getNurseName());
                     serviceSubtask.setCreateBy(serviceTask.getCreateBy());
                     serviceSubtask.setUpdateBy(serviceTask.getCreateBy());
-                    serviceSubtask.setVisitTime(patTaskRelevance.getVisitTime());
+                    serviceSubtask.setVisitTime(patTaskRelevance.getVisittime());
                     if (serviceTaskVO.getLongTask() != null && serviceTaskVO.getLongTask() == 1)
                         serviceSubtask.setLongSendTime(patTaskRelevance.getLongSendTime());
                     serviceSubtaskMapper.insertServiceSubtask(serviceSubtask);
                     serviceSubtask.getId().intValue();
+
+                    //闇�瑕佹寜service_task閲岀殑preachform鐨勯『搴忓皢鍙戦�佹柟寮忎繚瀛樺埌service_subtask_preachform琛ㄤ腑
+                    if (StringUtils.isNotEmpty(serviceTaskVO.getPreachformList())) {
+                        List<ServiceSubtaskPreachform> pfList = serviceTaskVO.getPreachformList();
+                        for (ServiceSubtaskPreachform serviceSubtaskPreachform : pfList) {
+                            serviceSubtaskPreachform.setTaskid(serviceTask.getTaskid());
+                            serviceSubtaskPreachform.setSubid(serviceSubtask.getId());
+                            //杩欎釜sendstate闇�瑕佸湪鏁版嵁搴撹缃竴涓粯璁ゅ�间负鈥�1鈥�
+                            serviceSubtaskPreachform.setSendstate("1");
+                            serviceSubtaskPreachform.setOrgid(serviceTask.getOrgid());
+                            serviceSubtaskPreachform.setCreateTime(new Date());
+                            serviceSubtaskPreachformMapper.insertServiceSubtaskPreachform(serviceSubtaskPreachform);
+                        }
+                    }
                 }
             }
 
@@ -579,8 +614,6 @@
                 serviceTask.setSendTimeSlot(JSON.toJSONString(serviceTaskVO.getSendTimeslot()));
             //淇敼鎿嶄綔锛岄渶瑕佸皢stopState鐘舵��+1
             ServiceTask serviceTask1 = serviceTaskService.selectServiceTaskByTaskid(serviceTask.getTaskid());
-//            long l = serviceTask1.getStopState() + 1;
-//            serviceTask.setStopState(l);
             //鑾峰彇鍒拌浠诲姟鎵�鏈夌殑鏈嶅姟锛屽苟浠庨槦鍒楅噷鍒犻櫎
             ServiceSubtaskVO serviceSubtaskVO = new ServiceSubtaskVO();
             serviceSubtaskVO.setTaskid(serviceTask1.getTaskid());
@@ -593,18 +626,6 @@
             } else {
                 if (CollectionUtils.isNotEmpty(serviceSubtaskList1)) serviceSubtaskList = serviceSubtaskList1;
             }
-            if (CollectionUtils.isNotEmpty(serviceSubtaskList)) {
-                for (ServiceSubtask serviceSubtask : serviceSubtaskList) {
-                    log.info("insertOrUpdateTask闇�瑕佺Щ闄ょ殑subId涓猴細{}", serviceSubtask.getId().toString());
-                    serviceSubtaskMapper.deleteServiceSubtaskById(serviceSubtask.getId());
-                    redisCache.removeElementFromList("cache-exist", serviceSubtask.getId().toString());
-                    redisCache.removeElementFromList("cache-0", serviceSubtask.getId().toString());
-                    redisCache.removeElementFromList("cache-1", serviceSubtask.getId().toString());
-                    redisCache.removeElementFromList("cache-2", serviceSubtask.getId().toString());
-                    redisCache.removeElementFromList("cache-3", serviceSubtask.getId().toString());
-                    redisCache.removeElementFromList("cache-4", serviceSubtask.getId().toString());
-                }
-            }
 
             if (serviceTaskVO.getLibtemplateid() != null)
                 serviceTask.setLibtemplateid(serviceTaskVO.getLibtemplateid().toString());
@@ -613,17 +634,14 @@
             serviceTask.setUpdateTime(new Date());
             serviceTaskService.updateServiceTask(serviceTask);
             if (serviceTaskVO.getAppltype().equals("1") || serviceTaskVO.getAppltype().equals("2")) {
-
-
                 if (StringUtils.isNotEmpty(serviceTaskVO.getDeptcode())) {
                     String[] deptcodes = serviceTaskVO.getDeptcode().split(",");
                     for (String deptCode : deptcodes) {
                         ServiceTaskdept serviceTaskdept = new ServiceTaskdept();
                         serviceTaskdept.setTaskId(serviceTask.getTaskid());
                         serviceTaskdept.setTaskName(serviceTask.getTaskName());
-                        serviceTaskdept.setLongtask(0L);
+                        serviceTaskdept.setLongtask(Long.valueOf(serviceTask.getLongTask()));
                         serviceTaskdept.setOrgid(serviceTaskVO.getOrgid());
-                        if (serviceTaskVO.getLongTask() == 1) serviceTaskdept.setLongtask(1L);
                         serviceTaskdept.setDeptCode(deptCode);
                         serviceTaskdept.setDeptType("1");
                         serviceTaskdept.setServiceType(serviceTaskVO.getServiceType());
@@ -644,9 +662,8 @@
                         ServiceTaskdept serviceTaskdept = new ServiceTaskdept();
                         serviceTaskdept.setTaskId(serviceTask.getTaskid());
                         serviceTaskdept.setTaskName(serviceTask.getTaskName());
-                        serviceTaskdept.setLongtask(0L);
+                        serviceTaskdept.setLongtask(Long.valueOf(serviceTask.getLongTask()));
                         serviceTaskdept.setOrgid(serviceTaskVO.getOrgid());
-                        if (serviceTaskVO.getLongTask() == 1) serviceTaskdept.setLongtask(1L);
                         serviceTaskdept.setDeptCode(districtcode);
                         serviceTaskdept.setDeptType("2");
                         serviceTaskdept.setServiceType(serviceTaskVO.getServiceType());
@@ -669,9 +686,7 @@
                 if (StringUtils.isEmpty(serviceTaskVO.getIcd10code())) {
                     throw new BaseException("鐤剧梾缂栫爜涓虹┖");
                 }
-//                serviceTaskdiag.setIcd10code(serviceTaskVO.getIcd10code());
-
-                serviceTaskdiag.setLongtask(1L);
+                serviceTaskdiag.setLongtask(Long.valueOf(serviceTask.getLongTask()));
                 serviceTaskdiag.setIcd10name(serviceTaskVO.getIcd10name());
                 serviceTaskdiag.setGuid(serviceTask.getGuid());
                 serviceTaskdiag.setOrgid(serviceTask.getOrgid());
@@ -695,7 +710,6 @@
                     }
                 }
 
-
             } else if (serviceTaskVO.getAppltype().equals("4")) {
                 ServiceTaskoper serviceTaskoper = new ServiceTaskoper();
                 if (StringUtils.isEmpty(serviceTaskVO.getOpcode())) {
@@ -705,7 +719,7 @@
                 serviceTaskoper.setOpdesc(serviceTaskVO.getOpdesc());
                 serviceTaskoper.setTaskId(serviceTask.getTaskid());
                 serviceTaskoper.setTaskName(serviceTask.getTaskName());
-                serviceTaskoper.setLongtask(1L);
+                serviceTaskoper.setLongtask(Long.valueOf(serviceTask.getLongTask()));
                 serviceTaskoper.setGuid(serviceTask.getGuid());
                 serviceTaskoper.setOrgid(serviceTask.getOrgid());
                 serviceTaskoper.setCreateTime(new Date());
@@ -728,7 +742,6 @@
                         }
                     }
                 }
-
             }
             if (ObjectUtils.isNotEmpty(serviceTaskVO.getIvrTaskTemplateVO())) {
                 IvrTaskTemplate ivrTaskTemplate = new IvrTaskTemplate();
@@ -771,12 +784,13 @@
                     serviceSubtask.setEndtime(patTaskRelevance.getEndtime());
                     serviceSubtask.setNurseId(patTaskRelevance.getNurseId());
                     serviceSubtask.setNurseName(patTaskRelevance.getNurseName());
-                    serviceSubtask.setVisitTime(patTaskRelevance.getVisitTime());
+                    serviceSubtask.setVisitTime(patTaskRelevance.getVisittime());
                     serviceSubtask.setTextParam(new Gson().toJson(serviceTaskVO.getTextParam()));
                     if (patTaskRelevance.getIsoperation() != null) {
-                        if (patTaskRelevance.getIsoperation() == 2)
+                        if (patTaskRelevance.getIsoperation() == 2) {
                             serviceSubtask.setUpdateBy(serviceTask.getUpdateBy());
-                        serviceSubtaskMapper.updateServiceSubtaskByCondition(serviceSubtask);
+                            serviceSubtaskMapper.updateServiceSubtaskByCondition(serviceSubtask);
+                        }
                         if (patTaskRelevance.getIsoperation() == 1) {
                             serviceSubtask.setSendstate(1L);
                             serviceSubtask.setUpdateBy(serviceTask.getUpdateBy());
@@ -788,6 +802,32 @@
                             serviceSubtaskMapper.deleteServiceSubtaskByCondition(serviceTaskVO.getTaskid(), patTaskRelevance.getPatid());
                     }
                     serviceSubtask.getTaskid().intValue();
+                }
+            }
+            // 鏈夊彲鑳戒細鎶婂彂閫侀『搴忎篃淇敼浜嗭紙闇�瑕佹牴鎹畉askId灏嗘墍鏈夌殑sendstate锛�=4,5,6鐨剆ubTask鎷夊嚭鏉ワ紝杩涜淇敼涓�涓嬶級
+            ServiceSubtaskVO ssVo = new ServiceSubtaskVO();
+            ssVo.setTaskid(serviceTaskVO.getTaskid());
+            ssVo.setDelFlag("0");
+            List<Long> ssList = new ArrayList<>();
+            ssList.add(1l);
+            ssList.add(2L);
+            ssList.add(3L);
+            ssVo.setSendstates(ssList);
+            List<ServiceSubtask> ssTaskList = serviceSubtaskMapper.selectServiceSubtaskBySendstate(ssVo);
+            for (int i = 0; i < ssTaskList.size(); i++) {
+                ServiceSubtask serviceSubtask = ssTaskList.get(i);
+                serviceSubtaskPreachformMapper.deleteServiceSubtaskPreachformBySubid(serviceSubtask.getId());
+                if (StringUtils.isNotEmpty(serviceTaskVO.getPreachformList())) {
+                    List<ServiceSubtaskPreachform> pfList = serviceTaskVO.getPreachformList();
+                    for (ServiceSubtaskPreachform serviceSubtaskPreachform : pfList) {
+                        serviceSubtaskPreachform.setTaskid(serviceTask.getTaskid());
+                        serviceSubtaskPreachform.setSubid(serviceSubtask.getId());
+                        //杩欎釜sendstate闇�瑕佸湪鏁版嵁搴撹缃竴涓粯璁ゅ�间负鈥�1鈥�
+                        serviceSubtaskPreachform.setSendstate("1");
+                        serviceSubtaskPreachform.setOrgid(serviceTask.getOrgid());
+//                        serviceSubtaskPreachform.setSort(Long.valueOf(i));
+                        serviceSubtaskPreachformMapper.insertServiceSubtaskPreachform(serviceSubtaskPreachform);
+                    }
                 }
             }
         }
@@ -1055,7 +1095,7 @@
         //鍒ゆ柇鏄惁鎸傛満
         String hangupState = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "- hangup");
         Object cacheObject1 = redisCache.getCacheObject(phoneCallReqYQVO.getTaskid() + "recordAccept-hungup");
-        if (StringUtils.isNotEmpty(hangupState) && hangup.equals("1") || ObjectUtils.isNotEmpty(cacheObject1) && String.valueOf(cacheObject1).equals("1")) {
+        if (StringUtils.isNotEmpty(hangupState) && hangupState.equals("1") || ObjectUtils.isNotEmpty(cacheObject1) && String.valueOf(cacheObject1).equals("1")) {
             return new PhoneCallBackYQVO();
         }
         if ("AsrCallback".equals(phoneCallReqYQVO.getOperate()) && phoneCallReqYQVO.getEnd_time() != null && phoneCallReqYQVO.getEnd_time() != -1) {
@@ -1064,6 +1104,8 @@
                 //鍒ゆ柇 recordAccept-hungup 鏄惁鏈夊�硷紝濡傛灉鏈夛紝鍒欒鏄庝笉鐢ㄥ鐞嗕簡锛屼箣鍓嶅凡缁忓鐞嗚繃浜嗭紙recordAccept-hungup杩欎釜涓昏鏄粰"閫氳瘽璁板綍鐢ㄧ殑锛�"锛�
                 Object cacheObject = redisCache.getCacheObject(phoneCallReqYQVO.getTaskid() + "recordAccept-hungup");
                 if (ObjectUtils.isNotEmpty(cacheObject) && String.valueOf(cacheObject).equals("1")) {
+                    ServiceSubtask serviceSubtask = serviceSubtaskMapper.selectServiceSubtaskById(Long.valueOf(phoneCallReqYQVO.getTaskid()));
+                    setFailPreachForm(serviceSubtask, "3", "鎷ㄥ彨鐨勭敤鎴锋蹇�", "4");
                     return new PhoneCallBackYQVO();
                 }
                 //濡傛灉鍙戦�佺姸鎬佷负6锛屽氨璇存槑宸茬粡鎵撳畬浜嗭紝涔熸病鏈夊繀瑕佺户缁線涓嬭蛋浜�
@@ -1085,8 +1127,12 @@
                 //鍏堟妸榛樿鐨剅ecordAccept-hungup鍒犻櫎锛屽啀鏇存柊
                 redisCache.deleteObject(phoneCallReqYQVO.getTaskid() + "recordAccept-hungup");
                 redisCache.setCacheObject(phoneCallReqYQVO.getTaskid() + "recordAccept-hungup", "1", 10, TimeUnit.MINUTES);
+
+                //璁板綍鐢佃瘽鍙戦�佺姸鎬�
+                setFailPreachForm(serviceSubtask2, "3", "鐢佃瘽鍙戦�佹垚鍔燂紙鎮h�呮寕鏂級", "4");
+
                 //杩欎釜鏃跺�欏氨闇�瑕佽蛋琛ュ伩鏈哄埗浜嗭紝鍏堟殏瀹氳蛋鐭俊
-                getSmsCompensate(Long.valueOf(phoneCallReqYQVO.getTaskid()));
+//                getSmsCompensate(Long.valueOf(phoneCallReqYQVO.getTaskid()));
                 return new PhoneCallBackYQVO();
             }
         }
@@ -1115,6 +1161,9 @@
                     req.put("caller", phoneCallReqYQVO.getPhone());
 //                    HttpUtils.sendPost(hangup, new Gson().toJson(req));
                     HttpUtil.postJsonRequest(hangup, new Gson().toJson(req));
+                    ServiceSubtask serviceSubtask = serviceSubtaskMapper.selectServiceSubtaskById(Long.valueOf(phoneCallReqYQVO.getTaskid()));
+                    //璁板綍鐢佃瘽鍙戦�佺姸鎬�
+                    setFailPreachForm(serviceSubtask, "3", "閫氳瘽姝e父缁撴潫", "9");
                     //鍒犻櫎缁撴潫璇殑鎮e瓨
                     redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "- jsy");
                 } else {
@@ -1122,6 +1171,7 @@
                     log.error("-------PlayEventCallbackPlaystop鐨勫�间负锛歿}", true);
                 }
             }
+
             return phoneCallBackYQVO;
         }
         //鑾峰彇鏀鹃煶鏄惁缁撴潫
@@ -1198,6 +1248,9 @@
                 serviceSubtask.setUpdateTime(new Date());
                 log.error("鍏堟洿鏂颁竴涓嬪垎鏁�,鐢佃瘽鐨剆erviceSubtask鐨勫�间负锛歿}", serviceSubtask);
                 serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
+                //璁板綍鐘舵��
+                setFailPreachForm(serviceSubtask, "3", "闈欓粯娆℃暟杈惧埌" + num + "娆�", "4");
+
                 Map<String, String> map = delRedisValue(null, id.toString());
                 if (ObjectUtils.isNotEmpty(map)) redisCache.setCacheObject(map.get("cacheName"), map.get("val"));
                 redisCache.deleteObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone());
@@ -1252,6 +1305,8 @@
                         ss.setSendstate(6L);
                         ss.setRemark("鐢佃瘽鎷ㄦ墦宸插畬鎴�");
                         serviceSubtaskMapper.updateServiceSubtask(ss);
+                        //璁板綍鐘舵��
+                        setFailPreachForm(serviceSubtask, "3", "鐢佃瘽鎷ㄦ墦宸插畬鎴�", "9");
                         //鍙互鎸傛満浜�
                         redisCache.deleteObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone());
                         redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "SCORE");
@@ -1336,6 +1391,8 @@
                             redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "- jsy", serviceTask.getJsy(), 120, TimeUnit.MINUTES);
                             phoneCallBackYQVO.setType("text");
                             phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + serviceTask.getJsy());
+                            //璁板綍鐘舵��
+                            setFailPreachForm(serviceSubtask, "3", "鐢佃瘽鎷ㄦ墦宸插畬鎴�", "9");
                             return phoneCallBackYQVO;
                         }
 
@@ -1367,6 +1424,9 @@
                                 ss.setSendstate(6L);
                                 ss.setRemark("鐢佃瘽鎷ㄦ墦宸插畬鎴�");
                                 serviceSubtaskMapper.updateServiceSubtask(ss);
+                                //璁板綍鐘舵��
+                                setFailPreachForm(serviceSubtask, "3", "鐢佃瘽鎷ㄦ墦宸插畬鎴�", "9");
+
                                 redisCache.deleteObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone());
                                 redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "SCORE");
                                 redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "PlayEventCallbackPlaystop");
@@ -1414,6 +1474,8 @@
                             serviceSubtask.setSendstate(6L);
                             serviceSubtask.setRemark("鐢佃瘽鎷ㄦ墦宸插畬鎴�");
                             serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
+                            //璁板綍鐘舵��
+                            setFailPreachForm(serviceSubtask, "3", "鐢佃瘽鎷ㄦ墦宸插畬鎴�", "9");
                             //璁剧疆缁撴潫璇�
                             phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + serviceTask1.getJsy());
                             Long id = serviceSubtask.getId();
@@ -1484,7 +1546,8 @@
                             serviceSubtask.setSendstate(6L);
                             serviceSubtask.setRemark("鐢佃瘽鎷ㄦ墦宸插畬鎴�");
                             serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
-
+                            //璁板綍鐘舵��
+                            setFailPreachForm(serviceSubtask, "3", "鐢佃瘽鎷ㄦ墦宸插畬鎴�", "9");
                             //鍦╮edis涓繚瀛樹竴涓嬬粨鏉熻锛屽湪璋冪敤鎸傜數璇濈殑鏂规硶鏃跺垹闄�
                             ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
                             redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "- jsy", serviceTask.getJsy(), 120, TimeUnit.MINUTES);
@@ -1588,7 +1651,8 @@
                     serviceSubtask.setRemark("鐢佃瘽鎷ㄦ墦宸插畬鎴�");
                     serviceSubtask.setSendstate(6L);
                     serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
-
+                    //璁板綍鐘舵��
+                    setFailPreachForm(serviceSubtask, "3", "鐢佃瘽鎷ㄦ墦宸插畬鎴�", "9");
                     //鍘籸edis涓紝鎶婅瀛愪换鍔D鍒犻櫎
                     Long id = serviceSubtask.getId();
                     Map<String, String> map = delRedisValue(null, id.toString());
@@ -1813,241 +1877,6 @@
     }
 
 
-    //涓嬮潰鐨勪唬鐮佷笉鑳藉垹闄わ紝涓婇潰鐨勬柟娉曞彧鏄厤鍚堢數璇濈鑱旇皟鐢ㄧ殑锛�
-//    @Override
-//    public PhoneCallBackVO phoneCallBack(PhoneCallBackVO phoneCallBackVO) {
-//        log.error("phoneCallBackVO鐨勫叆鍙傦細{},{},{},{},{},{},{}", phoneCallBackVO.getResultType(), phoneCallBackVO.getUuid(), phoneCallBackVO.getErrResult(), phoneCallBackVO.getTextResult(), phoneCallBackVO.getHangUpResult(), phoneCallBackVO.getEnumState(), phoneCallBackVO.getUint8());
-//        //鑾峰彇鏁版嵁
-//        Boolean aBoolean = redisCache.hasKey(phoneCallBackVO.getUuid());
-//        if (!aBoolean) {
-//            throw new BaseException("璇uid涓嶅瓨鍦�");
-//        }
-//        Integer hangupValue = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "hangup");
-//        if (hangupValue != null && hangupValue == 1) {
-//            //hangupValue == 1  闅忚缁撴潫锛岀洿鎺ュ彲浠ユ寕鐢佃瘽
-//            PhoneUtils phoneUtils = new PhoneUtils();
-//            phoneUtils.hangup(phoneCallBackVO.getUuid(), null, null, null, null, null, null, null);
-//
-//        }
-//
-//        Map<String, Object> map = redisCache.getCacheObject(phoneCallBackVO.getUuid());
-////        ObjectMapper objectMapper = new ObjectMapper();
-////        Map<String, Object> map = null;
-////        try {
-////            map = objectMapper.readValue(cacheObject, Map.class);
-////        } catch (JsonProcessingException e) {
-////            e.printStackTrace();
-////        }
-//
-//        ServiceSubtask ServiceSubtask = (ServiceSubtask) map.get("ServiceSubtask");
-//        List<IvrLibaTemplateScriptVO> ivrLibaTemplateScriptVOs = (List<IvrLibaTemplateScriptVO>) map.get("ivrLibaTemplateScriptVO");
-//        //灏唘uid鏇存柊鍒版暟鎹簱涓�
-//        ServiceSubtask.setSenduuid(phoneCallBackVO.getUuid());
-//        ServiceSubtaskMapper.updateServiceSubtask(ServiceSubtask);
-//
-//        //鑾峰彇妯℃澘淇℃伅
-//        IvrLibaTemplateVO ivrLibaTemplateVO = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "ivrLibaTemplateVO");
-//
-//
-//        //棣栧厛鍒ゆ柇resultType
-//        if (phoneCallBackVO.getResultType() == 1) {
-//            //鍛煎彨缁撴灉鎺ュ彛: 1
-//            if (phoneCallBackVO.getUint8() == 1) {
-//                //鍛煎彨澶辫触锛屽幓redis涓褰曚竴涓嬪け璐ユ鏁帮紝杩涜鍐嶆鍛煎彨
-//                Integer integer = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "uint8");
-//                if (integer != null) {
-//                    redisCache.setCacheObject(phoneCallBackVO.getUuid() + "uint8", integer + 1, 120, TimeUnit.MINUTES);
-//                } else {
-//                    redisCache.setCacheObject(phoneCallBackVO.getUuid() + "uint8", 1, 120, TimeUnit.MINUTES);
-//                }
-//
-//                if (integer != null && integer == ServiceSubtask.getRecallcount().intValue()) {
-//                    log.info("鏃犱汉鎺ュ惉锛歿},   {}", phoneCallBackVO.getErrResult(), phoneCallBackVO.getUuid());
-//                    //杩炵画鎵撹瀹氭锛屽鏋滆娌′汉鎺ワ紝閭e氨缁撴潫
-//                    ServiceSubtask.setResult(phoneCallBackVO.getErrResult());
-//                    ServiceSubtaskMapper.updateServiceSubtask(ServiceSubtask);
-//                    redisCache.deleteObject(phoneCallBackVO.getUuid() + "uint8");
-//                } else if (integer != null && integer < ServiceSubtask.getRecallcount().intValue()) {
-//                    //杩涜閲嶆嫧
-//                    PhoneUtils phoneUtils = new PhoneUtils();
-//                    phoneUtils.ob(null, null, null, null, null, null, null, ServiceSubtask.getPhone(), phoneCallBackVO.getUuid(), true);
-//                }
-//            }
-//
-//        } else if (phoneCallBackVO.getResultType() == 2) {
-//            //閫氳瘽鐘舵�佹洿鏂版帴鍙�: 2
-//            if (phoneCallBackVO.getEnumState() == 0) {
-//                // 0-鎸搩
-//                Integer integer = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "enumState");
-//
-//                if (integer != null && integer < ServiceSubtask.getRecallcount().intValue()) {
-//                    redisCache.setCacheObject(phoneCallBackVO.getUuid() + "enumState", integer + 1, 120, TimeUnit.MINUTES);
-//                } else if (integer == null) {
-//                    redisCache.setCacheObject(phoneCallBackVO.getUuid() + "enumState", 1, 120, TimeUnit.MINUTES);
-//                } else if (integer != null && integer == ServiceSubtask.getRecallcount().intValue()) {
-//                    ServiceSubtask.setResult("鏃犱汉鎺ュ惉");
-//                    ServiceSubtaskMapper.updateServiceSubtask(ServiceSubtask);
-//                    redisCache.deleteObject(phoneCallBackVO.getUuid() + "enumState");
-//                }
-//            } else if (phoneCallBackVO.getEnumState() == 2) {
-//                //鎮h�呮寕鏂數璇�
-//                log.info("鎮h�呮寕鏂數璇濓細{}", phoneCallBackVO.getUuid());
-//                ServiceSubtask.setResult(phoneCallBackVO.getHangUpResult());
-//                ServiceSubtaskMapper.updateServiceSubtask(ServiceSubtask);
-//                redisCache.deleteObject(phoneCallBackVO.getUuid() + "enumState");
-//            }
-//
-//
-//        } else if (phoneCallBackVO.getResultType() == 3) {
-//            //璇煶璇嗗埆缁撴灉涓婃姤鎺ュ彛: 3
-//            Integer noVoice = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "noVoice");
-//            QuestionMessage returnQues = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "returnQues");
-//            IvrLibaTemplateScriptVO nowQuestion = returnQues.getNowQuestion();
-//            PhoneUtils phoneUtils = new PhoneUtils();
-//
-//            if (StringUtils.isEmpty(phoneCallBackVO.getTextResult())) {
-//                //鏃犲洖璇�
-//                //鍒ゆ柇noVoice鏄惁宸茬粡鍒颁簡鏈�澶у��
-//                if (noVoice == ivrLibaTemplateVO.getNoVoiceNum().intValue()) {
-//                    //宸茬粡闂簡瀵瑰簲鐨勯亶鏁帮紝灏卞垽鏂槸鍚﹁繕鏈変笅涓�棰�
-//                    if (nowQuestion.getTargetid() == ivrLibaTemplateScriptVOs.size()) {
-//                        //娌℃湁涓嬩竴棰樹簡锛屽氨鎸傛柇鐢佃瘽锛屾挱鏀剧粨鏉熻
-//                        redisCache.setCacheObject(phoneCallBackVO.getUuid() + "hangup", 1, 120, TimeUnit.MINUTES);
-//                        phoneUtils.ttsPlayback(ivrLibaTemplateVO.getRevisitAfter(), phoneCallBackVO.getUuid());
-//                    } else {
-//                        //鏈変笅涓�棰�
-//                        redisCache.setCacheObject(phoneCallBackVO.getUuid() + "noVoice", 0, 120, TimeUnit.MINUTES);
-//                        IvrLibaTemplateScriptVO nextQuestion = getNextQuestion(ivrLibaTemplateScriptVOs, nowQuestion);
-//                        // 闂锛�  鍘昏皟鐢�"tts鍚堟垚鍜屾挱鏀�"鎺ュ彛
-//                        phoneUtils.ttsPlayback(nowQuestion.getQuestionText(), phoneCallBackVO.getUuid());
-//                    }
-//                } else {
-//                    redisCache.setCacheObject(phoneCallBackVO.getUuid() + "noVoice", noVoice + 1, 120, TimeUnit.MINUTES);
-//                    //璋冪敤ivrLibaTemplateScriptVO涓殑slienceText(闈欓粯璇濇湳)
-//                    String slienceText = nowQuestion.getSlienceText();
-//                    //闈欓粯璇濇湳  + 闂锛�  鍘昏皟鐢�"tts鍚堟垚鍜屾挱鏀�"鎺ュ彛
-//                    phoneUtils.ttsPlayback(slienceText + nowQuestion.getQuestionText(), phoneCallBackVO.getUuid());
-//                    return new PhoneCallBackVO();
-//                }
-//
-//            } else {
-//                //鏈夊洖璇濓紝瀵瑰洖绛旂殑闂,杩涜姝e垯鍖归厤锛堣繖閲屽彧閽堝閫夋嫨棰橈紝鍏跺畠棰樺瀷涓嶈锛�
-//                for (int j = 0; j < nowQuestion.getIvrLibaScriptTargetoptionList().size(); j++) {
-//                    //鍖呭惈
-//                    Matcher matcher = null;
-//                    if (StringUtils.isNotEmpty(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex())) {
-//                        Pattern pattern = Pattern.compile(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex());
-//                        matcher = pattern.matcher(phoneCallBackVO.getTextResult());
-//                    }
-//                    //涓嶅寘鍚�
-//                    Matcher matcher2 = null;
-//                    if (StringUtils.isNotEmpty(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex2())) {
-//                        Pattern pattern2 = Pattern.compile(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex2());
-//                        matcher2 = pattern2.matcher(phoneCallBackVO.getTextResult());
-//                    }
-//                    log.info("phoneCallBack--Targetregex鐨勫�间负锛歿}, phoneCallBack--Targetregex2鐨勫�间负锛歿}", nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex(), nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex2());
-//                    if (StringUtils.isNotEmpty(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex()) && matcher.matches() && StringUtils.isNotEmpty(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex2()) && matcher2.matches() || StringUtils.isEmpty(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex()) && StringUtils.isNotEmpty(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex2()) && matcher2.matches() || StringUtils.isEmpty(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex2()) && StringUtils.isNotEmpty(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex()) && matcher.matches()) {
-//                        //璇存槑鍖归厤姝g‘浜�
-//                        //杩欓噷搴旇鍏堝垽鏂被鍨嬶紝鍘诲啀淇敼锛岃缃甀sUserOperation鏄崟閫夐鐨勬敼娉�
-//                        nowQuestion.getIvrLibaScriptTargetoptionList().get(j).setIsUserOperation(true);
-//                        ivrLibaScriptTargetoptionMapper.updateIvrLibaTemplateTargetoption(nowQuestion.getIvrLibaScriptTargetoptionList().get(j));
-//
-//
-//                        //灏嗛潤榛樼疆涓�0
-//                        redisCache.setCacheObject(phoneCallBackVO.getUuid() + "noVoice", 0, 120, TimeUnit.MINUTES);
-//                        redisCache.setCacheObject(phoneCallBackVO.getUuid() + "mateNum", 0, 120, TimeUnit.MINUTES);
-//                        //鑾峰彇涓嬩竴棰�
-//                        Integer nextQuestion = nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getNextQuestion();
-//                        for (IvrLibaTemplateScriptVO script : ivrLibaTemplateScriptVOs) {
-//                            if (script.getTargetid() == nextQuestion) {
-//                                QuestionMessage questionMessage = new QuestionMessage();
-//                                questionMessage.setNowQuestion(script);
-//                                questionMessage.setQuestionList(ivrLibaTemplateScriptVOs);
-//                                redisCache.setCacheObject(phoneCallBackVO.getUuid() + "returnQues", questionMessage, 120, TimeUnit.MINUTES);
-//                                break;
-//                            }
-//                        }
-//                        break;
-//                    } else {
-//                        //娌℃湁鍖归厤鍒�
-//                        Integer mateNum = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "mateNum");
-//                        //鏃犲尮閰嶆鏁板幓鍒ゆ柇鏄惁鍒版渶澶ц闂鏁帮紝骞朵笖鎵�鏈夌殑閫夐」閮藉尮閰嶅畬浜�
-//                        if (mateNum == ivrLibaTemplateVO.getMateNum().intValue() && j == nowQuestion.getIvrLibaScriptTargetoptionList().size() - 1) {
-//                            //濡傛灉涓嬩竴棰樹负绌�.鍒欐柊鐨勬暟鎹繑鍥�,骞跺姞涓婃劅璋㈣
-//                            if (nowQuestion.getTargetid() < ivrLibaTemplateScriptVOs.size()) {
-//                                QuestionMessage questionMessage = new QuestionMessage();
-//                                IvrLibaTemplateScriptVO nextQuestion = getNextQuestion(ivrLibaTemplateScriptVOs, nowQuestion);
-//                                questionMessage.setQuestionList(ivrLibaTemplateScriptVOs);
-//                                questionMessage.setNowQuestion(nextQuestion);
-//                                redisCache.setCacheObject(phoneCallBackVO.getUuid() + "returnQues", questionMessage, 120, TimeUnit.MINUTES);
-//                                redisCache.setCacheObject(phoneCallBackVO.getUuid() + "mateNum", 0, 120, TimeUnit.MINUTES);
-//                            } else {
-//                                //灏卞彲浠ユ寕鏂數璇濅簡
-//                                redisCache.setCacheObject(phoneCallBackVO.getUuid() + "hangup", 1, 120, TimeUnit.MINUTES);
-//                                phoneUtils.ttsPlayback(ivrLibaTemplateVO.getRevisitAfter(), phoneCallBackVO.getUuid());
-//                                break;
-//                            }
-//                        } else if (mateNum < ivrLibaTemplateVO.getMateNum().intValue() && j == nowQuestion.getIvrLibaScriptTargetoptionList().size() - 1) {
-//                            //娌℃湁闂埌瑙勫畾娆℃暟
-//                            mateNum = mateNum + 1;
-//                            redisCache.setCacheObject(phoneCallBackVO.getUuid() + "mateNum", mateNum, 120, TimeUnit.MINUTES);
-//                        }
-//                    }
-//
-//                }
-//                //閫夐」鍖归厤瀹屾垚鍚庯紝闇�瑕佸啀鍘婚�氳繃搴撳啀杩涜鍖归厤涓�娆�
-//                String extemplateID = ivrLibaTemplateVO.getSubmoduleID();
-//                String[] split = extemplateID.split(",");
-//                List<String> list = Arrays.asList(split);
-//                List<Long> list1 = new ArrayList<>();
-//                if (StringUtils.isNotEmpty(extemplateID)) {
-//                    for (String str : list) {
-//                        list1.add(Long.valueOf(str));
-//                    }
-//                    List<IvrLibaExtemplatescript> ivrLibaExtemplatescripts = ivrLibaExtemplatescriptMapper.queryIvrLibaExtemplatescriptList(list1);
-//                    for (IvrLibaExtemplatescript ivrLibaExtemplatescript : ivrLibaExtemplatescripts) {
-//                        Matcher matcher = null;
-//                        if (StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex())) {
-//                            Pattern pattern = Pattern.compile(ivrLibaExtemplatescript.getSelfRegex());
-//                            matcher = pattern.matcher(returnQues.getContent());
-//                        }
-//
-//                        Matcher matcher2 = null;
-//                        if (StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex2())) {
-//                            Pattern pattern2 = Pattern.compile(ivrLibaExtemplatescript.getSelfRegex2());
-//                            matcher2 = pattern2.matcher(returnQues.getContent());
-//                        }
-//                        log.info("++++++++++++++++++++++++++閫氱敤搴撴槸鍚︿负绌猴細selfRegex : {} , selfRegex2 : {}", ivrLibaExtemplatescript.getSelfRegex(), ivrLibaExtemplatescript.getSelfRegex2());
-//                        if (StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex()) && matcher.matches() && StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex2()) && matcher2.matches() || StringUtils.isEmpty(ivrLibaExtemplatescript.getSelfRegex()) && StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex2()) && matcher2.matches() || StringUtils.isEmpty(ivrLibaExtemplatescript.getSelfRegex2()) && StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex()) && matcher.matches()) {
-//                            QuestionMessage questionMessage = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "returnQues");
-//                            IvrLibaTemplateScriptVO ivrLibaTemplateScriptVO = returnQues.getNowQuestion();
-//                            ivrLibaTemplateScriptVO.setSubmoduleText(ivrLibaExtemplatescript.getSwitchText());
-//                            ivrLibaTemplateScriptVO.setSubmoduleVoice(ivrLibaExtemplatescript.getSwitchWav());
-//                            redisCache.setCacheObject(phoneCallBackVO.getUuid() + "returnQues", questionMessage, 120, TimeUnit.MINUTES);
-//                            if (ivrLibaExtemplatescript.getIsEnd() == 1) {
-//                                //灏嗛棶棰樼疆绌�
-//                                IvrLibaTemplateScriptVO nowQuestion1 = questionMessage.getNowQuestion();
-//                                nowQuestion1.setQuestionText(null);
-//                                nowQuestion1.setQuestionVoice(null);
-//                                questionMessage.setNowQuestion(nowQuestion1);
-//                                redisCache.setCacheObject(phoneCallBackVO.getUuid() + "returnQues", questionMessage, 120, TimeUnit.MINUTES);
-//
-//                                redisCache.setCacheObject(phoneCallBackVO.getUuid() + "isOver", 1, 120, TimeUnit.MINUTES);
-//                            }
-//
-//                            //璋冪敤"15銆乼ts鍚堟垚鍜屾挱鏀撅紝 tts_playback"灏嗙粨鏋滀紶鍥�
-//
-//
-//                        }
-//                        break;
-//                    }
-//                }
-//
-//            }
-//        }
-//        return phoneCallBackVO;
-//    }
-
     @Override
     public Integer saveQuestionAnswerPhone(ServiceSubTaskDetailReq serviceSubTaskDetailReq) {
         int i = 0;
@@ -2066,7 +1895,7 @@
             //闅忚
             for (ServiceSubtaskDetail serviceSubtaskDetail : serviceSubTaskDetailReq.getServiceSubtaskDetailList()) {
                 serviceSubtaskDetail.setSubId(selectServiceSubtaskList.get(0).getId());
-                serviceSubtaskDetail.setId(UUID.randomUUID().toString());
+//                serviceSubtaskDetail.setId(UUID.randomUUID().toString());
                 serviceSubtaskDetail.setCreateTime(new Date());
                 serviceSubtaskDetail.setGuid(selectServiceSubtaskList.get(0).getGuid());
                 serviceSubtaskDetail.setOrgid(serviceSubTaskDetailReq.getOrgid());
@@ -2112,7 +1941,11 @@
         Object cacheObject = redisCache.getCacheObject(phoneCallRecordVO.getTaskid() + "recordAccept-hungup");
         if (phoneCallRecordVO.getHangup_cause().equals("NO_USER_RESPONSE") || ObjectUtils.isNotEmpty(cacheObject) && String.valueOf(cacheObject).equals("1")) {
             //鏃犱汉鎺ュ惉
-            getSmsCompensate(Long.valueOf(phoneCallRecordVO.getTaskid()));
+            //璁板綍鐢佃瘽鍙戦�佺姸鎬�
+            ServiceSubtask serviceSubtask = serviceSubtaskMapper.selectServiceSubtaskById(Long.valueOf(phoneCallRecordVO.getTaskid()));
+            setFailPreachForm(serviceSubtask, "3", "鏃犱汉鎺ュ惉", "4");
+            //杩涜鐭俊琛ュ伩
+//            getSmsCompensate(Long.valueOf(phoneCallRecordVO.getTaskid()));
             redisCache.deleteObject(phoneCallRecordVO.getTaskid() + "recordAccept-hungup");
             redisCache.removeElementFromList("cache-exist", phoneCallRecordVO.getTaskid());
         } else if (ObjectUtils.isNotEmpty(cacheObject) && String.valueOf(cacheObject).equals("2")) {
@@ -2130,6 +1963,7 @@
             serviceSubtask.setUpdateTime(new Date());
             log.error("鐢佃瘽鎷ㄦ墦宸插畬鎴恠erviceSubtask鐨勫�间负:{}", serviceSubtask);
             serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
+            setFailPreachForm(serviceSubtask, StringUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) ? serviceSubtask.getCurrentPreachform() : "3", "鐢佃瘽鎷ㄦ墦宸插畬鎴�", "9");
             //涓嬭浇鏂囦欢
             ftpService.downloadFolder("/" + LocalDate.now().toString(), profile + "/upload/vadio/voice/" + LocalDate.now().toString());
             redisCache.deleteObject(phoneCallRecordVO.getTaskid() + "recordAccept-hungup");
@@ -2147,8 +1981,10 @@
 //            int endIndex = phoneCallRecordVO.getRecord_path().lastIndexOf("/");
 //            String result = phoneCallRecordVO.getRecord_path().substring(startIndex, endIndex);
             //涓嬭浇鏂囦欢
-            ftpService.downloadFolder("/" + LocalDate.now().toString(), profile + "/upload/vadio/voice/" + LocalDate.now().toString());
+//            ftpService.downloadFolder("/" + LocalDate.now().toString(), profile + "/upload/vadio/voice/" + LocalDate.now().toString());
             redisCache.deleteObject(phoneCallRecordVO.getTaskid() + "recordAccept-hungup");
+            ServiceSubtask ss = serviceSubtaskMapper.selectServiceSubtaskById(serviceSubtask.getId());
+            setFailPreachForm(ss, StringUtils.isNotEmpty(ss.getCurrentPreachform()) ? ss.getCurrentPreachform() : "3", "鐢佃瘽鎺ラ�氭垚鍔燂紝鎮h�呮嫆缁濋殢璁�", "5");
         }
 
         return 1;
@@ -2227,11 +2063,11 @@
     public List<ServiceSubtaskStatistic> getSfStatistics(ServiceSubtaskCountReq serviceSubtaskCountReq) {
         log.error("getSfStatistics鐨勫叆鍙備负锛歿}", serviceSubtaskCountReq);
         List<ServiceSubtaskStatistic> serviceSubtaskStatistics = new ArrayList<>();
-        List<ServiceSubtask> rawData = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq);
-        
+//        List<ServiceSubtask> rawData = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq);
+
         // 鏍规嵁鏉′欢杩涜鍒嗙粍
         Map<String, List<ServiceSubtask>> collect = new HashMap<>();
-        
+
         if (serviceSubtaskCountReq.getLeavehospitaldistrictcodes() != null && serviceSubtaskCountReq.getLeavehospitaldistrictcodes().size() > 0) {
             if (serviceSubtaskCountReq.getDrcode() != null && !serviceSubtaskCountReq.getDrcode().isEmpty()) {
                 collect = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq).stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getDrname()).orElse("Unknown")));
@@ -2245,7 +2081,7 @@
                 collect = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq).stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getDeptname()).orElse("Unknown")));
             }
         }
-        
+
         for (List<ServiceSubtask> serviceSubtaskList : collect.values()) {
             if (CollectionUtils.isEmpty(serviceSubtaskList)) {
                 continue;
@@ -2259,14 +2095,14 @@
             // 濡傛灉鏈夊尰鐢熺紪鐮侊紝璁剧疆鍖荤敓缂栫爜鐢ㄤ簬鍙婃椂鐜囨煡璇�
             if (serviceSubtaskCountReq.getDrcode() != null && !serviceSubtaskCountReq.getDrcode().isEmpty()) {
                 ss.setDrcode(serviceSubtaskList.get(0).getDrcode());
-            }else {
+            } else {
                 if (CollectionUtils.isNotEmpty(serviceSubtaskCountReq.getLeavehospitaldistrictcodes())) {
                     ss.setLeavehospitaldistrictcode(serviceSubtaskList.get(0).getLeavehospitaldistrictcode());
                 } else if (CollectionUtils.isNotEmpty(serviceSubtaskCountReq.getDeptcodes())) {
                     ss.setDeptcode(serviceSubtaskList.get(0).getDeptcode());
                 }
             }
-            
+
             ss.setStarttime(serviceSubtaskCountReq.getStartTime());
             ss.setEndtime(serviceSubtaskCountReq.getEndTime());
             if (serviceSubtaskCountReq.getEndTime() != null && new Date().before(serviceSubtaskCountReq.getEndTime())) {
@@ -2310,15 +2146,15 @@
                 collect = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq).stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getDeptname()).orElse("Unknown")));
             }
         }
-        List<ServiceSubtaskCount> joySubCount=serviceSubtaskMapper.getSfStatisticsJoy(serviceSubtaskCountReq);
+        List<ServiceSubtaskCount> joySubCount = serviceSubtaskMapper.getSfStatisticsJoy(serviceSubtaskCountReq);
         for (List<ServiceSubtask> serviceSubtaskList : collect.values()) {
             if (CollectionUtils.isEmpty(serviceSubtaskList)) {
                 continue;
             }
-            ServiceSubtaskStatistic statistic = getStatisticJoy(serviceSubtaskList,joySubCount);
-            if(statistic.getJoyCount()!=0&&statistic.getJoyAllCount()!=0) {
+            ServiceSubtaskStatistic statistic = getStatisticJoy(serviceSubtaskList, joySubCount);
+            if (statistic.getJoyCount() != 0 && statistic.getJoyAllCount() != 0) {
                 Double joyTotal = Double.parseDouble(statistic.getJoyCount() + "") / Double.parseDouble(statistic.getJoyAllCount() + "") * 100;
-                statistic.setJoyTotal(String.format("%.2f", joyTotal)+"%");
+                statistic.setJoyTotal(String.format("%.2f", joyTotal) + "%");
             }
             //鍙婃椂鐜�
             ServiceSubtask ss = new ServiceSubtask();
@@ -2327,7 +2163,7 @@
             // 濡傛灉鏈夊尰鐢熺紪鐮侊紝璁剧疆鍖荤敓缂栫爜鐢ㄤ簬鍙婃椂鐜囨煡璇�
             if (serviceSubtaskCountReq.getDrcode() != null && !serviceSubtaskCountReq.getDrcode().isEmpty()) {
                 ss.setDrcode(serviceSubtaskList.get(0).getDrcode());
-            }else {
+            } else {
                 if (CollectionUtils.isNotEmpty(serviceSubtaskCountReq.getLeavehospitaldistrictcodes())) {
                     ss.setLeavehospitaldistrictcode(serviceSubtaskList.get(0).getLeavehospitaldistrictcode());
                 } else if (CollectionUtils.isNotEmpty(serviceSubtaskCountReq.getDeptcodes())) {
@@ -2380,7 +2216,7 @@
                 if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 2) {
                     serviceSubtaskStatistic.setPendingFollowUp(serviceSubtaskStatistic.getPendingFollowUp() + 1L);
                 }
-                if (serviceSubtask.getSendstate() != null && ( serviceSubtask.getSendstate() == 6)) {
+                if (serviceSubtask.getSendstate() != null && (serviceSubtask.getSendstate() == 6)) {
                     serviceSubtaskStatistic.setFollowUpSuccess(serviceSubtaskStatistic.getFollowUpSuccess() + 1L);
                 }
                 if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 5) {
@@ -2445,7 +2281,7 @@
         return serviceSubtaskStatistic;
     }
 
-    private ServiceSubtaskStatistic getStatisticJoy(List<ServiceSubtask> serviceSubtaskList,List<ServiceSubtaskCount> joySubCount) {
+    private ServiceSubtaskStatistic getStatisticJoy(List<ServiceSubtask> serviceSubtaskList, List<ServiceSubtaskCount> joySubCount) {
         ServiceSubtaskStatistic serviceSubtaskStatistic = new ServiceSubtaskStatistic();
         //鏍煎紡鍖栦负涓や綅灏忔暟鐨勭櫨鍒嗘瘮
         DecimalFormat percentFormat = new DecimalFormat("##.##%");
@@ -2461,13 +2297,12 @@
         serviceSubtaskStatistic.setJoyAllCount(0);
         for (ServiceSubtask serviceSubtask : serviceSubtaskList) {
             //婊℃剰搴�
-            List<ServiceSubtaskCount> joyCountTemp= joySubCount.stream().filter(r->r.getSubTaskId().equals(serviceSubtask.getId()))
-                    .collect(Collectors.toList());
-            if(joyCountTemp!=null&&joyCountTemp.size()>0){
-                if(ObjectUtils.isNotEmpty(joyCountTemp.get(0).getJoyCount()))
-                    serviceSubtaskStatistic.setJoyCount(serviceSubtaskStatistic.getJoyCount()+joyCountTemp.get(0).getJoyCount());
-                if(ObjectUtils.isNotEmpty(joyCountTemp.get(0).getJoyAllCount()))
-                    serviceSubtaskStatistic.setJoyAllCount(serviceSubtaskStatistic.getJoyAllCount()+joyCountTemp.get(0).getJoyAllCount());
+            List<ServiceSubtaskCount> joyCountTemp = joySubCount.stream().filter(r -> r.getSubTaskId().equals(serviceSubtask.getId())).collect(Collectors.toList());
+            if (joyCountTemp != null && joyCountTemp.size() > 0) {
+                if (ObjectUtils.isNotEmpty(joyCountTemp.get(0).getJoyCount()))
+                    serviceSubtaskStatistic.setJoyCount(serviceSubtaskStatistic.getJoyCount() + joyCountTemp.get(0).getJoyCount());
+                if (ObjectUtils.isNotEmpty(joyCountTemp.get(0).getJoyAllCount()))
+                    serviceSubtaskStatistic.setJoyAllCount(serviceSubtaskStatistic.getJoyAllCount() + joyCountTemp.get(0).getJoyAllCount());
             }
             //鏃犻渶闅忚浜烘
             if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 4) {
@@ -2486,7 +2321,7 @@
                 if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 2) {
                     serviceSubtaskStatistic.setPendingFollowUp(serviceSubtaskStatistic.getPendingFollowUp() + 1L);
                 }
-                if (serviceSubtask.getSendstate() != null && ( serviceSubtask.getSendstate() == 6)) {
+                if (serviceSubtask.getSendstate() != null && (serviceSubtask.getSendstate() == 6)) {
                     serviceSubtaskStatistic.setFollowUpSuccess(serviceSubtaskStatistic.getFollowUpSuccess() + 1L);
                 }
                 if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 5) {
@@ -2611,6 +2446,11 @@
         return serviceSubtaskDetail;
     }
 
+    /**
+     * 鐢佃瘽鐨勮ˉ鍋挎柟娉曪紙鑰侊級
+     *
+     * @param subTaskId
+     */
     private void getSmsCompensate(Long subTaskId) {
         ServiceSubtask serviceSubtask = serviceSubtaskMapper.selectServiceSubtaskById(subTaskId);
         RSAPublicKeyExample rsaPublicKeyExample = new RSAPublicKeyExample();
@@ -2641,6 +2481,34 @@
         serviceSubtask.setSendstate(3L);
         serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
 
+        //闇�瑕佸湪servicePreachform閲岃褰曚竴涓嬬煭淇$姸鎬�
+        ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform();
+        serviceSubtaskPreachform.setPreachform("4");
+        serviceSubtaskPreachform.setSubid(subTaskId);
+        serviceSubtaskPreachform.setTaskid(serviceSubtask.getTaskid());
+        serviceSubtaskPreachform.setOrgid(serviceSubtask.getOrgid());
+        List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
+        if (CollectionUtils.isNotEmpty(serviceSubtaskPreachforms)) {
+            ServiceSubtaskPreachform serviceSubtaskPreachform1 = serviceSubtaskPreachforms.get(0);
+            serviceSubtaskPreachform1.setSendstate("9");
+            serviceSubtaskPreachformMapper.updateServiceSubtaskPreachform(serviceSubtaskPreachform1);
+        } else if (CollectionUtils.isEmpty(serviceSubtaskPreachforms)) {
+            //濡傛灉涓虹┖鐨勮瘽锛岃鏄庣敤鎴锋病鏈夐�夌煭淇″彂閫佹柟寮忥紝杩欎釜鏃跺�欓渶瑕佸己鍒舵柊澧炰竴鏉�
+            //鑾峰彇sort鐨勬渶澶у��
+            ServiceSubtaskPreachform ssp = new ServiceSubtaskPreachform();
+            ssp.setSubid(subTaskId);
+            ssp.setTaskid(serviceSubtask.getTaskid());
+            ssp.setOrgid(serviceSubtask.getOrgid());
+            List<ServiceSubtaskPreachform> sspf2 = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(ssp);
+
+            serviceSubtaskPreachform.setSort(0L);
+            if (CollectionUtils.isNotEmpty(sspf2)) {
+                serviceSubtaskPreachform.setSort(Long.valueOf(sspf2.size()));
+            }
+            serviceSubtaskPreachform.setSendstate("2");
+            serviceSubtaskPreachformMapper.insertServiceSubtaskPreachform(serviceSubtaskPreachform);
+        }
+
     }
 
     //閫氳繃褰撳墠鏃堕棿锛屾媺鍙栫數璇濇�绘暟
@@ -2665,6 +2533,72 @@
     }
 
     public List<ServiceSubtaskCount> getSfStatisticsJoydetails(ServiceSubtaskCountReq serviceSubtaskCountReq) {
-       return serviceSubtaskMapper.getSfStatisticsJoydetails(serviceSubtaskCountReq);
+        return serviceSubtaskMapper.getSfStatisticsJoydetails(serviceSubtaskCountReq);
+    }
+
+
+    /**
+     * @param serviceSubtask
+     * @param preachform
+     * @param remark
+     * @param failSendstate
+     * @return
+     */
+    public Boolean setFailPreachForm(ServiceSubtask serviceSubtask, String preachform, String remark, String failSendstate) {
+        //灏嗙姸鎬佽缃负澶辫触
+        ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform();
+        serviceSubtaskPreachform.setSubid(serviceSubtask.getId());
+        serviceSubtaskPreachform.setTaskid(serviceSubtask.getTaskid());
+        serviceSubtaskPreachform.setOrgid(serviceSubtask.getOrgid());
+        //鑾峰彇璇ユ偅鑰呯殑鍙戦�佹柟寮忔�绘暟
+        List<ServiceSubtaskPreachform> spSize = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
+
+        serviceSubtaskPreachform.setPreachform(preachform);
+        //1:鏈彂閫佺姸鎬�
+        serviceSubtaskPreachform.setSendstate("1");
+        if (preachform.equals("3")) {
+            //鐢佃瘽杩涘叆闃熷垪鍚庯紝鐘舵�佷細鍙樻垚2
+            serviceSubtaskPreachform.setSendstate("2");
+        }
+        List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
+        if (CollectionUtils.isNotEmpty(serviceSubtaskPreachforms)) {
+            ServiceSubtaskPreachform serviceSubtaskPreachform1 = serviceSubtaskPreachforms.get(0);
+            serviceSubtaskPreachform1.setSendstate(failSendstate);
+            serviceSubtaskPreachform1.setRemark(remark);
+            serviceSubtaskPreachformMapper.updateServiceSubtaskPreachform(serviceSubtaskPreachform1);
+
+            //濡傛灉褰撳墠鐨刾reachform宸茬粡鏄渶鍚庝竴涓簡锛岄偅鐩存帴灏唖erviceSubtask鐨剆endstate鐘舵�佹敼鎴�5灏辫浜�(鍏ㄥけ璐ヤ簡)
+            if (serviceSubtaskPreachform1.getSort() == spSize.size() && failSendstate.equals("4")) {
+                serviceSubtask.setCurrentPreachform(preachform);
+                serviceSubtask.setSendstate(5L);
+                serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
+                return true;
+            }
+        }
+
+        serviceSubtask.setCurrentPreachform(preachform);
+        serviceSubtask.setSendstate(3L);
+        //濡傛灉绛変簬9锛屽垯璇存槑鐢佃瘽姝e父缁撴潫浜�
+        if (failSendstate.equals("9")) serviceSubtask.setSendstate(6L);
+        serviceSubtask.setVisitTime(getNextVisitTime(serviceSubtask.getId(), serviceSubtask.getTaskid(), serviceSubtask.getVisitTime()));
+        serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
+        return true;
+    }
+
+    private Date getNextVisitTime(Long subid, Long taskid, Date visitTime) {
+        ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform();
+        serviceSubtaskPreachform.setSubid(subid);
+        serviceSubtaskPreachform.setTaskid(taskid);
+        List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
+        if (CollectionUtils.isNotEmpty(serviceSubtaskPreachforms)) {
+            String compensateTime = serviceSubtaskPreachforms.get(0).getCompensateTime();
+            int hoursToAdd = Integer.valueOf(compensateTime) * 24;
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTime(visitTime);
+            calendar.add(Calendar.HOUR_OF_DAY, hoursToAdd);
+            Date newDate = calendar.getTime();
+            return newDate;
+        }
+        return visitTime;
     }
 }
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceTaskServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/ServiceTaskServiceImpl.java
index 1aba511..2ed3017 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceTaskServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceTaskServiceImpl.java
@@ -45,13 +45,15 @@
 
 
     @Autowired
-    private SvyTaskTemplateMapper svyTaskTemplateMapper;
+    private ServiceSubtaskPreachformMapper serviceSubtaskPreachformMapper;
 
     @Autowired
     private HeLibraryMapper heLibraryMapper;
 
     @Autowired
     private IvrLibaTemplateScriptMapper ivrLibaTemplateScriptMapper;
+    @Autowired
+    private IvrTaskTemplateScriptMapper ivrTaskTemplateScriptMapper;
 
     @Autowired
     private SvyLibTemplateScriptMapper svyLibTemplateScriptMapper;
@@ -59,9 +61,17 @@
     @Autowired
     private PatArchiveMapper patArchiveMapper;
 
+    @Autowired
+    private PatMedInhospMapper patMedInhospMapper;
+
+    @Autowired
+    private PatMedOuthospMapper patMedOuthospMapper;
+
 
     @Autowired
     private IvrLibaTemplateTargetoptionMapper ivrLibaTemplateTargetOptionMapper;
+    @Autowired
+    private IvrTaskTemplateTargetoptionMapper ivrTaskTemplateTargetOptionMapper;
 
     @Autowired
     private SvyLibTemplateTargetoptionMapper svyLibTemplateTargetoptionMapper;
@@ -224,7 +234,8 @@
         ServiceSubtaskVO serviceSubtaskVO = new ServiceSubtaskVO();
         serviceSubtaskVO.setPatid(patid);
         serviceSubtaskVO.setTaskid(taskid);
-//        List<ServiceSubtask> selectServiceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO);
+        serviceSubtaskVO.setSendstate(3L);
+        List<ServiceSubtask> selectServiceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO);
 //        //鏌ヨ鎮h�呮槸鍚﹂噸瑕嗗仛棰�
 //        if (CollectionUtils.isEmpty(selectServiceSubtaskList)) {
 //            Long submit = selectServiceSubtaskList.get(0).getSubmit();
@@ -255,20 +266,121 @@
                 Integer integer = serviceSubtaskMapper.selectSendstateByCondition(ss);
                 if (integer != null && integer != 6) {
                     ss.setSendstate(1L);
-//                    ss.setResult("success");
-//                    ss.setFinishtime(new Date());
                     serviceSubtaskMapper.updateServiceSubtaskByCondition(ss);
                 }
             }
         }
 
-        SvyTaskTemplate svyTaskTemplate = svyTaskTemplateMapper.selectSvyTaskTemplateBySvyid(serviceTask.getTemplateid());
+        if (CollectionUtils.isNotEmpty(selectServiceSubtaskList)) {
+            //灏嗗綋鍓嶆柟寮忕殑鍙戦�佺姸鎬佹敼鎴愬凡棰嗗彇
+            ServiceSubtask serviceSubtask = selectServiceSubtaskList.get(0);
+            ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform();
+            serviceSubtaskPreachform.setPreachform(serviceSubtask.getCurrentPreachform());
+            serviceSubtaskPreachform.setSubid(serviceSubtask.getId());
+            serviceSubtaskPreachform.setTaskid(serviceTask.getTaskid());
+            List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
+            if (CollectionUtils.isNotEmpty(serviceSubtaskPreachforms)) {
+                ServiceSubtaskPreachform ssp = serviceSubtaskPreachforms.get(0);
+                ssp.setSendstate("3");
+                serviceSubtaskPreachformMapper.updateServiceSubtaskPreachform(ssp);
+            }
+        }
+
         if (StringUtils.isNotEmpty(serviceTask.getKcb())) map.put("kcb", serviceTask.getKcb());
         map.put("script", info);
         if (StringUtils.isNotEmpty(serviceTask.getJsy())) map.put("jsy", serviceTask.getJsy());
         map.put("type", serviceTask.getType());
         map.put("taskName", serviceTask.getTaskName());
         map.put("submit", "0");
+        return map;
+    }
+
+    @Override
+    public Map<String, Object> getScriptByCondition(Long taskid, String zyserialnum, String mzserialnum, String tsserialnum) {
+        //閫氳繃浠诲姟ID鑾峰彇妯℃澘ID
+        ServiceTask serviceTask = selectServiceTaskByTaskid(taskid);
+        //閫氳繃妯℃澘ID鑾峰彇闂淇℃伅
+        SvyLibTemplateScript svyLibTemplateScript = new SvyLibTemplateScript();
+        svyLibTemplateScript.setSvyid(Long.valueOf(serviceTask.getLibtemplateid()));
+        svyLibTemplateScript.setDelFlag("0");
+        List<SvyLibTemplateScript> svyLibTemplateScripts = svyLibTemplateScriptMapper.selectSvyLibTemplateScriptList(svyLibTemplateScript);
+        if (CollectionUtils.isEmpty(svyLibTemplateScripts) || svyLibTemplateScripts.size() == 0) {
+            log.info("ivrLibaTemplateScripts涓虹┖浜嗭紝璇峰敖蹇仈绯荤鐞嗗憳澶勭悊");
+            return null;
+        }
+        PatArchive patArchive = null;
+        if (StringUtils.isNotEmpty(zyserialnum)) {
+            PatMedInhospVO patMedInhospVO = new PatMedInhospVO();
+            patMedInhospVO.setSerialnum(zyserialnum);
+            List<PatMedInhosp> patMedInhospList = patMedInhospMapper.selectPatMedInhospListByCondition(patMedInhospVO);
+            if (CollectionUtils.isNotEmpty(patMedInhospList)) {
+                patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedInhospList.get(0).getPatid());
+            }
+        } else if (StringUtils.isNotEmpty(mzserialnum)) {
+            PatMedOuthosp patMedOuthosp = new PatMedOuthosp();
+            patMedOuthosp.setSerialnum(mzserialnum);
+            List<PatMedOuthosp> patMedOuthosps = patMedOuthospMapper.selectPatMedOuthospList(patMedOuthosp);
+            if (CollectionUtils.isNotEmpty(patMedOuthosps)) {
+                patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedOuthosps.get(0).getPatid());
+            }
+        } else if (StringUtils.isNotEmpty(tsserialnum)) {
+            PatArchive pa = new PatArchive();
+            pa.setPatientno(tsserialnum);
+            List<PatArchive> patArchives = patArchiveMapper.selectPatArchiveList(pa);
+            if (CollectionUtils.isNotEmpty(patArchives)) patArchive = patArchives.get(0);
+        }
+
+        //鍒ゆ柇涓�涓嬩粖澶╂槸鍚﹀凡缁忓仛杩囬锛屽仛杩囧氨涓嶈鍐嶅仛浜�
+        ServiceSubtaskVO serviceSubtaskVO = new ServiceSubtaskVO();
+        serviceSubtaskVO.setTaskid(taskid);
+        serviceSubtaskVO.setPatid(patArchive.getId());
+        serviceSubtaskVO.setVisitTime(new Date());
+        List<ServiceSubtask> serviceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO);
+        if (CollectionUtils.isNotEmpty(serviceSubtaskList) && serviceSubtaskList.size() > 0) {
+            Map<String, Object> map = new HashMap<>();
+            map.put("result", "浠婃棩宸茬粡鍋氳繃婊℃剰搴﹁皟鏌� 锛屾棤闇�鍐嶉噸澶嶅仛绛旓紒");
+            return map;
+        }
+
+        List<SvyLibTemplateScriptVO> svyLibTemplateScriptVOS = DtoConversionUtils.sourceToTarget(svyLibTemplateScripts, SvyLibTemplateScriptVO.class);
+        //灏嗘ā鏉块棶棰樿瘽鏈噷鐨勯�氶厤绗︽浛鎹�
+        ObjectMapper objectMapper = new ObjectMapper();
+        Map<String, Map<String, String>> serviceTaskMap = null;
+        try {
+            serviceTaskMap = objectMapper.readValue(serviceTask.getTextParam(), Map.class);
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+        }
+        List<Map<String, String>> mapList = new ArrayList<>();
+
+        for (Map<String, String> map : serviceTaskMap.values()) {
+            mapList.add(map);
+        }
+        for (SvyLibTemplateScriptVO svyLibTemplateScriptVO : svyLibTemplateScriptVOS) {
+            if (StringUtils.isNotEmpty(svyLibTemplateScriptVO.getScriptContent())) {
+                for (Map<String, String> map : mapList) {
+                    for (String key : map.keySet()) {
+
+                        svyLibTemplateScriptVO.setScriptContent(svyLibTemplateScriptVO.getScriptContent().replace(key, StringUtils.isNotEmpty(map.get(key)) ? map.get(key) : ""));
+                    }
+                }
+                //鏇挎崲鎮h�呬釜浜轰俊鎭暟鎹�
+                log.error("闂id锛歿},   闂鍐呭锛歿}", svyLibTemplateScriptVO.getId(), svyLibTemplateScriptVO.getScriptContent());
+                if (StringUtils.isNotEmpty(svyLibTemplateScriptVO.getScriptContent()) && ObjectUtils.isNotEmpty(patArchive)) {
+                    svyLibTemplateScriptVO.setScriptContent(svyLibTemplateScriptVO.getScriptContent().replace("${name}", StringUtils.isNotEmpty(patArchive.getName()) ? patArchive.getName() : ""));
+                    svyLibTemplateScriptVO.setScriptContent(svyLibTemplateScriptVO.getScriptContent().replace("${dzz}", StringUtils.isNotEmpty(patArchive.getPlaceOfResidence()) ? patArchive.getPlaceOfResidence() : ""));
+                    svyLibTemplateScriptVO.setScriptContent(svyLibTemplateScriptVO.getScriptContent().replace("${dhh}", StringUtils.isNotEmpty(patArchive.getTelcode()) ? patArchive.getTelcode() : ""));
+                }
+                //鑾峰彇闂閫夐」
+                SvyLibTemplateTargetoption svyLibTemplateTargetoption = new SvyLibTemplateTargetoption();
+                svyLibTemplateTargetoption.setScriptid(svyLibTemplateScriptVO.getId());
+                List<SvyLibTemplateTargetoption> svyLibTemplateTargetoptions = svyLibTemplateTargetoptionMapper.selectSvyLibTemplateTargetoptionList(svyLibTemplateTargetoption);
+                svyLibTemplateScriptVO.setSvyLibTemplateTargetoptions(svyLibTemplateTargetoptions);
+            }
+        }
+        Map<String, Object> map = new HashMap<>();
+        map.put("result", null);
+        map.put("svyLibTemplateScriptVOS", svyLibTemplateScriptVOS);
         return map;
     }
 
@@ -281,15 +393,15 @@
      */
     public List sfInfo(ServiceTask serviceTask, Long patid, String patfrom) {
         //閫氳繃妯℃澘ID鑾峰彇闂淇℃伅
-        IvrLibaTemplateScript ivrLibaTemplateScript = new IvrLibaTemplateScript();
-        ivrLibaTemplateScript.setTemplateid(Long.valueOf(serviceTask.getLibtemplateid()));
-        ivrLibaTemplateScript.setDelFlag("0");
-        List<IvrLibaTemplateScript> ivrLibaTemplateScripts = ivrLibaTemplateScriptMapper.selectIvrLibaTemplateScriptList(ivrLibaTemplateScript);
-        if (CollectionUtils.isEmpty(ivrLibaTemplateScripts) || ivrLibaTemplateScripts.size() == 0) {
+        IvrTaskTemplateScript ivrTaskTemplateScript = new IvrTaskTemplateScript();
+        ivrTaskTemplateScript.setTemplateID(Long.valueOf(serviceTask.getTemplateid()));
+        ivrTaskTemplateScript.setDelFlag("0");
+        List<IvrTaskTemplateScript> ivrTaskTemplateScripts = ivrTaskTemplateScriptMapper.selectIvrTaskTemplateScriptList(ivrTaskTemplateScript);
+        if (CollectionUtils.isEmpty(ivrTaskTemplateScripts) || ivrTaskTemplateScripts.size() == 0) {
             log.info("ivrLibaTemplateScripts涓虹┖浜嗭紝璇峰敖蹇仈绯荤鐞嗗憳澶勭悊");
             return new ArrayList<>();
         }
-        List<IvrLibaTemplateScriptVO> ivrLibaTemplateScriptVOS = DtoConversionUtils.sourceToTarget(ivrLibaTemplateScripts, IvrLibaTemplateScriptVO.class);
+        List<IvrTaskTemplateScriptVO> ivrTaskTemplateScriptVOS = DtoConversionUtils.sourceToTarget(ivrTaskTemplateScripts, IvrTaskTemplateScriptVO.class);
 
         //鑾峰彇鎮h�呬俊鎭�
         PatArchive patArchive = null;
@@ -314,29 +426,29 @@
         }
 
         //灏嗘ā鏉块棶棰樿瘽鏈噷鐨勯�氶厤绗︽浛鎹�
-        for (IvrLibaTemplateScriptVO ivrLibaTemplateScriptVO : ivrLibaTemplateScriptVOS) {
-            if (StringUtils.isNotEmpty(ivrLibaTemplateScriptVO.getScriptContent())) {
+        for (IvrTaskTemplateScriptVO ivrTaskTemplateScriptVO : ivrTaskTemplateScriptVOS) {
+            if (StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getScriptContent())) {
                 for (Map<String, String> map : mapList) {
                     for (String key : map.keySet()) {
 
-                        ivrLibaTemplateScriptVO.setScriptContent(ivrLibaTemplateScriptVO.getScriptContent().replace(key, StringUtils.isNotEmpty(map.get(key)) ? map.get(key) : ""));
+                        ivrTaskTemplateScriptVO.setScriptContent(ivrTaskTemplateScriptVO.getScriptContent().replace(key, StringUtils.isNotEmpty(map.get(key)) ? map.get(key) : ""));
                     }
                 }
                 //鏇挎崲鎮h�呬釜浜轰俊鎭暟鎹�
-                ivrLibaTemplateScriptVO.setScriptContent(ivrLibaTemplateScriptVO.getScriptContent().replace("${name}", StringUtils.isNotEmpty(patArchive.getName()) ? patArchive.getName() : ""));
-                ivrLibaTemplateScriptVO.setScriptContent(ivrLibaTemplateScriptVO.getScriptContent().replace("${dzz}", StringUtils.isNotEmpty(patArchive.getPlaceOfResidence()) ? patArchive.getPlaceOfResidence() : ""));
-                ivrLibaTemplateScriptVO.setScriptContent(ivrLibaTemplateScriptVO.getScriptContent().replace("${dhh}", StringUtils.isNotEmpty(patArchive.getTelcode()) ? patArchive.getTelcode() : ""));
+                ivrTaskTemplateScriptVO.setScriptContent(ivrTaskTemplateScriptVO.getScriptContent().replace("${name}", StringUtils.isNotEmpty(patArchive.getName()) ? patArchive.getName() : ""));
+                ivrTaskTemplateScriptVO.setScriptContent(ivrTaskTemplateScriptVO.getScriptContent().replace("${dzz}", StringUtils.isNotEmpty(patArchive.getPlaceOfResidence()) ? patArchive.getPlaceOfResidence() : ""));
+                ivrTaskTemplateScriptVO.setScriptContent(ivrTaskTemplateScriptVO.getScriptContent().replace("${dhh}", StringUtils.isNotEmpty(patArchive.getTelcode()) ? patArchive.getTelcode() : ""));
 
                 //鑾峰彇闂閫夐」
-                IvrLibaTemplateTargetoption ivrLibaTemplateTargetoption = new IvrLibaTemplateTargetoption();
-                ivrLibaTemplateTargetoption.setScriptid(ivrLibaTemplateScriptVO.getId());
-                List<IvrLibaTemplateTargetoption> ivrLibaTemplateTargetoptions = ivrLibaTemplateTargetOptionMapper.selectIvrLibaTemplateTargetoptionList(ivrLibaTemplateTargetoption);
-                ivrLibaTemplateScriptVO.setIvrLibaScriptTargetoptionList(ivrLibaTemplateTargetoptions);
+                IvrTaskTemplateTargetoption ivrTaskTemplateTargetoption = new IvrTaskTemplateTargetoption();
+                ivrTaskTemplateTargetoption.setScriptid(ivrTaskTemplateScriptVO.getId());
+                List<IvrTaskTemplateTargetoption> ivrTaskTemplateTargetoptions = ivrTaskTemplateTargetOptionMapper.selectIvrTaskTemplateTargetoptionList(ivrTaskTemplateTargetoption);
+                ivrTaskTemplateScriptVO.setIvrTaskScriptTargetoptionList(ivrTaskTemplateTargetoptions);
             }
         }
-        Collections.sort(ivrLibaTemplateScriptVOS, Comparator.comparingLong(IvrLibaTemplateScriptVO::getSort));
+        Collections.sort(ivrTaskTemplateScriptVOS, Comparator.comparingLong(IvrTaskTemplateScriptVO::getSort));
 
-        return ivrLibaTemplateScriptVOS;
+        return ivrTaskTemplateScriptVOS;
     }
 
     /**
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceTelInfoServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/ServiceTelInfoServiceImpl.java
index dae868d..a0f88b0 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceTelInfoServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceTelInfoServiceImpl.java
@@ -23,7 +23,7 @@
      */
     @Override
     public List<Map<String,Object>> getList() {
-       List<Map<String,Object>> lists= utilsMapper.getList("select * from service_telinfo where state=0  OR DATE_ADD(editTime, INTERVAL 10 MINUTE)< NOW()  ");
+       List<Map<String,Object>> lists= utilsMapper.getList("select * from service_telinfo where state=0 ");
         return lists;
     }
     /**
diff --git a/smartor/src/main/java/com/smartor/service/impl/SvyTaskSingleServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/SvyTaskSingleServiceImpl.java
index ce09f39..f52638e 100644
--- a/smartor/src/main/java/com/smartor/service/impl/SvyTaskSingleServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/SvyTaskSingleServiceImpl.java
@@ -350,7 +350,7 @@
             }else if(ObjectUtils.isNotEmpty(serviceQueryInfo.getUrl360())){
                 result = OkHttpExample.sendPostRequest(serviceQueryInfo.getUrl360(), jsonString, token);
             }
-                map = objectMapper.readValue(result, Map.class);
+            map = objectMapper.readValue(result, Map.class);
         } catch (Exception e) {
             e.printStackTrace();
         }
@@ -362,6 +362,7 @@
         return map;
     }
 
+
     @Override
     public Map focus(ServiceQueryFocus serviceQueryFocus) {
         return null;
diff --git a/smartor/src/main/resources/mapper/smartor/HNGatherPatArchiveMapper.xml b/smartor/src/main/resources/mapper/smartor/HNGatherPatArchiveMapper.xml
index ac28143..30fe095 100644
--- a/smartor/src/main/resources/mapper/smartor/HNGatherPatArchiveMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/HNGatherPatArchiveMapper.xml
@@ -645,7 +645,7 @@
                d.create_time,
                d.his_dept_id,
                d.his_parent_id
-        FROM bmxx d
+        FROM HEALTHY_DEPT d
 
     </select>
 </mapper>
diff --git a/smartor/src/main/resources/mapper/smartor/PatArchiveMapper.xml b/smartor/src/main/resources/mapper/smartor/PatArchiveMapper.xml
index ce7292e..11c69e2 100644
--- a/smartor/src/main/resources/mapper/smartor/PatArchiveMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/PatArchiveMapper.xml
@@ -519,7 +519,7 @@
             </if>
         </where>
         order by a.update_time desc
-        <if test="pn != null  and ps != null"> limit ${pn},${ps} </if>
+        <if test="pn != null  and ps != null">limit ${pn},${ps}</if>
 
     </select>
 
@@ -660,8 +660,9 @@
                 AND NOT exists ( SELECT 1 FROM pat_filterlist f where d.patid=f.patid)
             </if>
         </where>
-        order by a.update_time desc
-        <if test="pn != null  and ps != null"> limit ${pn},${ps} </if>
+        -- order by a.update_time desc
+        <if test="pageSize != null  and pageNum != null">limit ${pageSize} OFFSET ${pageNum}</if>
+
     </select>
 
     <select id="selectPatArchiveInfoByOuthosp" parameterType="com.smartor.domain.PatArchiveReq"
@@ -751,8 +752,8 @@
                 AND NOT exists ( SELECT 1 FROM pat_filterlist f where d.patid=f.patid)
             </if>
         </where>
-        order by a.update_time desc
-        <if test="pn != null  and ps != null"> limit ${pn},${ps} </if>
+        -- order by a.update_time desc
+        <if test="pageSize != null  and pageNum != null">limit ${pageSize} OFFSET ${pageNum}</if>
     </select>
 
     <select id="selectPatArchiveInfoByPhysical" parameterType="com.smartor.domain.PatArchiveReq"
@@ -844,8 +845,8 @@
                 AND NOT exists ( SELECT 1 FROM pat_filterlist f where d.patid=f.patid)
             </if>
         </where>
-        order by a.update_time desc
-        <if test="pn != null  and ps != null"> limit ${pn},${ps} </if>
+        -- order by a.update_time desc
+        <if test="pageSize != null  and pageNum != null">limit ${pageSize} OFFSET ${pageNum}</if>
     </select>
 
     <select id="selectPatArchiveInfoByInhospQC" parameterType="com.smartor.domain.PatArchiveReq"
@@ -939,8 +940,8 @@
             <if test="drcode != null">
                 AND d.drcode = #{drcode}
             </if>
-            <if test="cry != null and cry == 0 ">and d.endtime is null</if>
-            <if test="cry != null and cry == 1 ">and d.endtime is not null</if>
+            <if test="allhosp != null and allhosp == 1 ">and d.endtime is null</if>
+            <if test="allhosp != null and allhosp == 4 ">and d.endtime is not null</if>
             <if test="visitno != null and visitno != ''">
                 AND d.inhospno = #{visitno}
             </if>
@@ -989,8 +990,8 @@
                 AND NOT exists ( SELECT 1 FROM pat_filterlist f where d.patid=f.patid)
             </if>
         </where>
-        order by a.id,a.update_time desc ) as tmp order by endtime desc
-        <if test="pn != null  and ps != null"> limit ${pn},${ps} </if>
+        <if test="pageSize != null  and pageNum != null">limit ${pageSize} OFFSET ${pageNum}</if>
+        ) as tmp
     </select>
 
     <select id="selectPatArchiveInfoByOuthospQC" parameterType="com.smartor.domain.PatArchiveReq"
@@ -1084,7 +1085,7 @@
                 AND NOT exists ( SELECT 1 FROM pat_filterlist f where d.patid=f.patid)
             </if>
         </where>
-        order by a.update_time desc
+        <if test="pageSize != null  and pageNum != null">limit ${pageSize} OFFSET ${pageNum}</if>
     </select>
 
     <select id="selectPatArchiveInfoByPhysicalQC" parameterType="com.smartor.domain.PatArchiveReq"
@@ -1176,6 +1177,7 @@
                 AND NOT exists ( SELECT 1 FROM pat_filterlist f where d.patid=f.patid)
             </if>
         </where>
-        order by a.update_time desc
+        -- order by a.update_time desc
+        <if test="pageSize != null  and pageNum != null">limit ${pageSize} OFFSET ${pageNum}</if>
     </select>
 </mapper>
diff --git a/smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml b/smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml
index 351aab6..032b5b7 100644
--- a/smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml
@@ -387,9 +387,9 @@
         b.out_way_name,
         b.nurse_id,
         b.nurse_name,
-        b.deptcheckFlag,
-        b.diagcheckFlag,
-        b.wardcheckFlag,
+        b.deptcheck_flag,
+        b.diagcheck_flag,
+        b.wardcheck_flag,
         b.inhospstate,
         b.patno,
         b.inhospno,
@@ -436,7 +436,7 @@
         b.futypecode,
         b.futypedesc,
         b.fuadvice,
-        b.fuspecialadvice
+        b.fuspecialadvice,
         b.schemetime
         FROM
         pat_med_inhosp b,
@@ -456,6 +456,7 @@
                 concat('%', #{hospitaldistrictname}, '%')
             </if>
             <if test="endtime != null ">and b.endtime = #{endtime}</if>
+            <if test="serialnum != null ">and b.serialnum = #{serialnum}</if>
             <if test="fuflag != null ">and b.fuflag = #{fuflag}</if>
             <if test="nurseId != null ">and b.nurse_id = #{nurseId}</if>
             <if test="nurseName != null ">and b.nurse_name = #{nurseName}</if>
diff --git a/smartor/src/main/resources/mapper/smartor/PatMedOuthospMapper.xml b/smartor/src/main/resources/mapper/smartor/PatMedOuthospMapper.xml
index 52f3ec3..039bc61 100644
--- a/smartor/src/main/resources/mapper/smartor/PatMedOuthospMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/PatMedOuthospMapper.xml
@@ -122,6 +122,15 @@
                 #{hospitalname},
                 '%')
             </if>
+            <if test="deptcodes != null and deptcodes.size()>0">
+                AND  pmo.deptcode IN
+                <foreach collection="deptcodes" item="deptcode" open="(" separator=","
+                         close=")">
+                    #{deptcode}
+                </foreach>
+            </if>
+
+
             <if test="deptname != null  and deptname != ''">and pmo.deptname like concat('%', #{deptname}, '%')</if>
             <if test="drname != null  and drname != ''">and pmo.drname like concat('%', #{drname}, '%')</if>
             <if test="patname != null  and patname != ''">and pmo.patname like concat('%', #{patname}, '%')</if>
diff --git a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskDetailMapper.xml b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskDetailMapper.xml
index 761ca97..011efb7 100644
--- a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskDetailMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskDetailMapper.xml
@@ -171,7 +171,9 @@
         where id = #{id}
     </select>
 
-    <insert id="insertServiceSubtaskDetail" parameterType="com.smartor.domain.ServiceSubtaskDetail">
+    <insert id="insertServiceSubtaskDetail" parameterType="com.smartor.domain.ServiceSubtaskDetail"
+            useGeneratedKeys="true"
+            keyProperty="id">
         insert into service_subtask_detail
         <trim prefix="(" suffix=")" suffixOverrides=",">
             <if test="id != null">id,</if>
diff --git a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
index e3f07ff..cd63052 100644
--- a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
@@ -84,6 +84,7 @@
         <result property="visitDeptCode" column="visit_dept_code"/>
         <result property="managementDoctor" column="management_doctor"/>
         <result property="managementDoctorCode" column="management_doctor_code"/>
+        <result property="currentPreachform" column="current_preachform"/>
     </resultMap>
 
     <resultMap type="com.smartor.domain.ServiceSubtaskCount" id="ServiceSubtaskResult2">
@@ -104,6 +105,7 @@
                patfrom,
                management_doctor,
                management_doctor_code,
+               current_preachform,
                upid,
                visit_dept_name,
                visit_dept_code,
@@ -184,6 +186,36 @@
                management_doctor_code
         from service_subtask
     </sql>
+
+    <select id="selectServiceSubtaskBySendstate" parameterType="com.smartor.domain.ServiceSubtaskVO"
+            resultMap="ServiceSubtaskResult">
+
+        <include refid="selectServiceSubtaskVo"/>
+        <where>
+            del_flag=0
+            and taskid = #{taskid}
+            AND sendstate IN
+            <foreach collection="sendstates" item="sendstate" open="(" separator=","
+                     close=")">
+                #{sendstate}
+            </foreach>
+        </where>
+    </select>
+
+    <select id="queryServiceSubtaskList" parameterType="com.smartor.domain.ServiceSubtaskVO"
+            resultMap="ServiceSubtaskResult">
+        <include refid="selectServiceSubtaskVo"/>
+        <where>
+            del_flag=0
+            <if test="taskid != null ">and taskid = #{taskid}</if>
+            <if test="visitTime != null">
+                AND date_format(visit_time,'%y%m%d') &lt;= date_format(#{visitTime},'%y%m%d')
+            </if>
+            <if test="sendstate != null ">and sendstate = #{sendstate}</if>
+        </where>
+
+    </select>
+
 
     <select id="selectServiceSubtaskList" parameterType="com.smartor.domain.ServiceSubtaskVO"
             resultMap="ServiceSubtaskResult">
@@ -275,6 +307,9 @@
                 </if>
             </if>
 
+            <if test="visitTime != null">
+                AND date_format(visit_time,'%y%m%d') = date_format(#{visitTime},'%y%m%d')
+            </if>
             <if test="senddate != null ">and senddate = #{senddate}</if>
             <if test="senduuid != null  and senduuid != ''">and senduuid = #{senduuid}</if>
             <if test="result != null  and result != ''">and result = #{result}</if>
@@ -290,6 +325,7 @@
             <if test="orgid != null  and orgid != ''">and orgid = #{orgid}</if>
             <if test="pid != null ">and pid = #{pid}</if>
             <if test="preachform != null ">and preachform = #{preachform}</if>
+            <if test="currentPreachform != null ">and current_preachform = #{currentPreachform}</if>
             <if test="guid != null  and guid != ''">and guid = #{guid}</if>
             <if test="textParam != null  and textParam != ''">and text_param = #{textParam}</if>
             <if test="bedNo != null">and bed_no = #{bedNo}</if>
@@ -324,7 +360,7 @@
             <if test="createBy != null">and create_by = #{createBy}</if>
             <if test="taskGuid != null">and task_guid = #{taskGuid}</if>
             <if test="isVisitAgain != null">and is_visit_again = #{isVisitAgain}</if>
-            <if test="visitTime != null">and visit_time = #{visitTime}</if>
+            <!-- <if test="visitTime != null">and visit_time = #{visitTime}</if> -->
             <!--<if test="visitDeptCode != null">and visit_dept_code = #{visitDeptCode}</if>
             <if test="visitDeptName != null">and visit_dept_name = #{visitDeptName}</if>-->
             <if test="visitCount != null and visitCount > 1 and visitDeptCodes != null and visitDeptCodes.size() > 0">
@@ -367,6 +403,7 @@
             <if test="visitDeptName != null">and visit_dept_name = #{visitDeptName}</if>
             <if test="managementDoctorCode != null">and management_doctor_code = #{managementDoctorCode}</if>
             <if test="managementDoctor != null">and management_doctor = #{managementDoctor}</if>
+            <if test="currentPreachform != null">and current_preachform = #{currentPreachform}</if>
         </where>
 
     </select>
@@ -421,6 +458,7 @@
             <if test="visitTime != null ">and visit_time = #{visitTime}</if>
             <if test="visitDeptCode != null">and visit_dept_code = #{visitDeptCode}</if>
             <if test="visitDeptName != null">and visit_dept_name = #{visitDeptName}</if>
+            <if test="currentPreachform != null">and current_preachform = #{currentPreachform}</if>
             <if test="managementDoctorCode != null">and management_doctor_code = #{managementDoctorCode}</if>
             <if test="managementDoctor != null">and management_doctor like concat('%',#{managementDoctor}, '%')</if>
         </where>
@@ -585,6 +623,7 @@
             <if test="visitDeptName != null">visit_dept_name,</if>
             <if test="managementDoctorCode != null">management_doctor_code,</if>
             <if test="managementDoctor != null">management_doctor,</if>
+            <if test="currentPreachform != null">current_preachform,</if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="sendname != null">#{sendname},</if>
@@ -668,6 +707,7 @@
             <if test="visitDeptName != null">#{visitDeptName},</if>
             <if test="managementDoctorCode != null">#{managementDoctorCode},</if>
             <if test="managementDoctor != null">#{managementDoctor},</if>
+            <if test="currentPreachform != null">#{currentPreachform},</if>
         </trim>
     </insert>
 
@@ -756,6 +796,7 @@
             <if test="visitDeptName != null">visit_dept_name = #{visitDeptName},</if>
             <if test="managementDoctorCode != null">management_doctor_code = #{managementDoctorCode},</if>
             <if test="managementDoctor != null">management_doctor=#{managementDoctor},</if>
+            <if test="currentPreachform != null">current_preachform=#{currentPreachform},</if>
         </trim>
         where id = #{id}
     </update>
@@ -845,6 +886,7 @@
             <if test="visitDeptName != null">visit_dept_name = #{visitDeptName},</if>
             <if test="managementDoctorCode != null">management_doctor_code = #{managementDoctorCode},</if>
             <if test="managementDoctor != null">management_doctor=#{managementDoctor},</if>
+            <if test="currentPreachform != null">current_preachform=#{currentPreachform},</if>
         </trim>
         <where>
             <if test="patid != null ">and patid = #{patid}</if>
@@ -936,6 +978,7 @@
             <if test="visitDeptName != null">visit_dept_name = #{visitDeptName},</if>
             <if test="managementDoctorCode != null">management_doctor_code = #{managementDoctorCode},</if>
             <if test="managementDoctor != null">management_doctor=#{managementDoctor},</if>
+            <if test="currentPreachform != null">current_preachform=#{currentPreachform},</if>
         </trim>
         where patid = #{patid} and taskid = #{taskid}
     </update>
@@ -1024,6 +1067,7 @@
             <if test="visitDeptName != null">visit_dept_name = #{visitDeptName},</if>
             <if test="managementDoctorCode != null">management_doctor_code = #{managementDoctorCode},</if>
             <if test="managementDoctor != null">management_doctor=#{managementDoctor},</if>
+            <if test="currentPreachform != null">current_preachform=#{currentPreachform},</if>
         </trim>
         where task_guid = #{taskGuid} and task_name = #{taskName}
     </update>
@@ -1204,6 +1248,7 @@
                openid,
                sfzh,
                addr,
+               current_preachform,
                senderdetail,
                type,
                taskid,
@@ -1342,16 +1387,16 @@
                 DATE_FORMAT(visit_time, '%Y-%m-%d') AS timePeriod,
             </otherwise>
         </choose>
-        COUNT(CASE WHEN service_type = '2' THEN 1 END) AS dischargeFollowCount,
-        COUNT(CASE WHEN service_type = '3' THEN 1 END) AS outpatientFollowCount,
+        CASE WHEN service_type = '2' THEN 1 END AS dischargeFollowCount,
+        CASE WHEN service_type = '3' THEN 1 END AS outpatientFollowCount,
         0 AS pmiCount,
         0 AS pmoCount
         FROM service_subtask
         WHERE
         del_flag = '0'
         <if test="startDate != null and endDate != null">
-            and date_format(visit_time,'%y%m%d') &gt;= date_format(#{startDate},'%y%m%d')
-            and date_format(visit_time,'%y%m%d') &lt;= date_format(#{endDate},'%y%m%d')
+            AND visit_time >= #{startDate}
+            AND visit_time &lt;= DATE_ADD(#{endDate}, INTERVAL 1 DAY)
         </if>
 
         <if test="orgid != null">
@@ -1379,24 +1424,24 @@
             </foreach>
         </if>
 
-        GROUP BY
-        <choose>
-            <when test="timeType == 'day'">
-                DATE_FORMAT(visit_time, '%Y-%m-%d')
-            </when>
-            <when test="timeType == 'month'">
-                DATE_FORMAT(visit_time, '%Y-%m')
-            </when>
-            <when test="timeType == 'year'">
-                DATE_FORMAT(visit_time, '%Y')
-            </when>
-            <when test="timeType == 'week'">
-                CONCAT(YEAR(visit_time), '-W', LPAD(WEEK(visit_time, 1), 2, '0'))
-            </when>
-            <otherwise>
-                DATE_FORMAT(visit_time, '%Y-%m-%d')
-            </otherwise>
-        </choose>
+<!--        GROUP BY-->
+<!--        <choose>-->
+<!--            <when test="timeType == 'day'">-->
+<!--                DATE_FORMAT(visit_time, '%Y-%m-%d')-->
+<!--            </when>-->
+<!--            <when test="timeType == 'month'">-->
+<!--                DATE_FORMAT(visit_time, '%Y-%m')-->
+<!--            </when>-->
+<!--            <when test="timeType == 'year'">-->
+<!--                DATE_FORMAT(visit_time, '%Y')-->
+<!--            </when>-->
+<!--            <when test="timeType == 'week'">-->
+<!--                CONCAT(YEAR(visit_time), '-W', LPAD(WEEK(visit_time, 1), 2, '0'))-->
+<!--            </when>-->
+<!--            <otherwise>-->
+<!--                DATE_FORMAT(visit_time, '%Y-%m-%d')-->
+<!--            </otherwise>-->
+<!--        </choose>-->
 
         UNION ALL
 
@@ -1421,13 +1466,13 @@
         </choose>
         0 AS dischargeFollowCount,
         0 AS outpatientFollowCount,
-        COUNT( patid) AS pmiCount,
+        1 AS pmiCount,
         0 AS pmoCount
         FROM pat_med_inhosp
         WHERE del_flag = '0'
         <if test="startDate != null and endDate != null">
-            and date_format(endtime,'%y%m%d') &gt;= date_format(#{startDate},'%y%m%d')
-            and date_format(endtime,'%y%m%d') &lt;= date_format(#{endDate},'%y%m%d')
+            AND endtime >= #{startDate}
+            AND endtime &lt;= DATE_ADD(#{endDate}, INTERVAL 1 DAY)
         </if>
 
         AND inhospstate=1
@@ -1449,24 +1494,24 @@
             </foreach>
         </if>
 
-        GROUP BY
-        <choose>
-            <when test="timeType == 'day'">
-                DATE_FORMAT(endtime, '%Y-%m-%d')
-            </when>
-            <when test="timeType == 'month'">
-                DATE_FORMAT(endtime, '%Y-%m')
-            </when>
-            <when test="timeType == 'year'">
-                DATE_FORMAT(endtime, '%Y')
-            </when>
-            <when test="timeType == 'week'">
-                CONCAT(YEAR(endtime), '-W', LPAD(WEEK(endtime, 1), 2, '0'))
-            </when>
-            <otherwise>
-                DATE_FORMAT(endtime, '%Y-%m-%d')
-            </otherwise>
-        </choose>
+<!--        GROUP BY-->
+<!--        <choose>-->
+<!--            <when test="timeType == 'day'">-->
+<!--                DATE_FORMAT(endtime, '%Y-%m-%d')-->
+<!--            </when>-->
+<!--            <when test="timeType == 'month'">-->
+<!--                DATE_FORMAT(endtime, '%Y-%m')-->
+<!--            </when>-->
+<!--            <when test="timeType == 'year'">-->
+<!--                DATE_FORMAT(endtime, '%Y')-->
+<!--            </when>-->
+<!--            <when test="timeType == 'week'">-->
+<!--                CONCAT(YEAR(endtime), '-W', LPAD(WEEK(endtime, 1), 2, '0'))-->
+<!--            </when>-->
+<!--            <otherwise>-->
+<!--                DATE_FORMAT(endtime, '%Y-%m-%d')-->
+<!--            </otherwise>-->
+<!--        </choose>-->
 
         UNION ALL
 
@@ -1492,12 +1537,12 @@
         0 AS dischargeFollowCount,
         0 AS outpatientFollowCount,
         0 AS pmiCount,
-        COUNT( patid) AS pmoCount
+        1 AS pmoCount
         FROM pat_med_outhosp
         WHERE del_flag = '0'
         <if test="startDate != null and endDate != null">
-            and date_format(admitdate,'%y%m%d') &gt;= date_format(#{startDate},'%y%m%d')
-            and date_format(admitdate,'%y%m%d') &lt;= date_format(#{endDate},'%y%m%d')
+            AND admitdate >= #{startDate}
+            AND admitdate &lt;= DATE_ADD(#{endDate}, INTERVAL 1 DAY)
         </if>
         <if test="orgid != null">
             AND orgid = #{orgid}
@@ -1510,24 +1555,24 @@
             </foreach>
         </if>
 
-        GROUP BY
-        <choose>
-            <when test="timeType == 'day'">
-                DATE_FORMAT(admitdate, '%Y-%m-%d')
-            </when>
-            <when test="timeType == 'month'">
-                DATE_FORMAT(admitdate, '%Y-%m')
-            </when>
-            <when test="timeType == 'year'">
-                DATE_FORMAT(admitdate, '%Y')
-            </when>
-            <when test="timeType == 'week'">
-                CONCAT(YEAR(admitdate), '-W', LPAD(WEEK(admitdate, 1), 2, '0'))
-            </when>
-            <otherwise>
-                DATE_FORMAT(admitdate, '%Y-%m-%d')
-            </otherwise>
-        </choose>
+<!--        GROUP BY-->
+<!--        <choose>-->
+<!--            <when test="timeType == 'day'">-->
+<!--                DATE_FORMAT(admitdate, '%Y-%m-%d')-->
+<!--            </when>-->
+<!--            <when test="timeType == 'month'">-->
+<!--                DATE_FORMAT(admitdate, '%Y-%m')-->
+<!--            </when>-->
+<!--            <when test="timeType == 'year'">-->
+<!--                DATE_FORMAT(admitdate, '%Y')-->
+<!--            </when>-->
+<!--            <when test="timeType == 'week'">-->
+<!--                CONCAT(YEAR(admitdate), '-W', LPAD(WEEK(admitdate, 1), 2, '0'))-->
+<!--            </when>-->
+<!--            <otherwise>-->
+<!--                DATE_FORMAT(admitdate, '%Y-%m-%d')-->
+<!--            </otherwise>-->
+<!--        </choose>-->
         ) AS combined_data
         GROUP BY timePeriod
         ORDER BY timePeriod DESC
diff --git a/smartor/src/main/resources/mapper/smartor/SysDeptMapper.xml b/smartor/src/main/resources/mapper/smartor/SysDeptMapper.xml
index 089aa5e..cebb745 100644
--- a/smartor/src/main/resources/mapper/smartor/SysDeptMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/SysDeptMapper.xml
@@ -120,23 +120,28 @@
 
     <select id="selectDeptByCode" parameterType="string" resultMap="SysDeptResult">
         select d.dept_id,
-               d.parent_id,
-               d.type,
-               d.dept_code,
-               d.dept_type,
-               d.ancestors,
-               d.dept_name,
-               d.order_num,
-               d.leader,
-               d.phone,
-               d.email,
-               d.orgid,
-               d.his_dept_id,
-               d.his_parent_id
-            d.status
+        d.parent_id,
+        d.type,
+        d.dept_code,
+        d.dept_type,
+        d.ancestors,
+        d.dept_name,
+        d.order_num,
+        d.leader,
+        d.phone,
+        d.email,
+        d.orgid,
+        d.his_dept_id,
+        d.his_parent_id,
+        d.status
         from sys_dept d
         where del_flag = 0
-          and d.dept_code = #{deptCode}
+        <if test="deptCode != null and deptCode != ''">
+            AND dept_code = #{deptCode}
+        </if>
+        <if test="orgid != null and orgid != ''">
+            AND orgid = #{orgid}
+        </if>
     </select>
 
     <select id="checkDeptExistUser" parameterType="Long" resultType="int">
@@ -306,7 +311,7 @@
 
     <delete id="deleteDeptById" parameterType="Long">
         update sys_dept
-        set del_flag = '2'
+        set del_flag = '1'
         where dept_id = #{deptId}
     </delete>
 
diff --git a/smartor/src/main/resources/mapper/smartor/SysUserDeptMapper.xml b/smartor/src/main/resources/mapper/smartor/SysUserDeptMapper.xml
index 0608f36..dbdef40 100644
--- a/smartor/src/main/resources/mapper/smartor/SysUserDeptMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/SysUserDeptMapper.xml
@@ -195,7 +195,7 @@
                d.orgid,
                d.status as dept_status
         from sys_dept d
-                 left join sys_user_dept ud on d.dept_id = ud.dept_id
+                 left join sys_user_dept ud on d.dept_code = ud.dept_code
         where ud.user_id = #{userId}
           and ud.del_flag = 0
           and d.del_flag = 0

--
Gitblit v1.9.3