From 50443fef22aaa77a1456e1981b51c10e69618b34 Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期三, 22 四月 2026 10:01:54 +0800
Subject: [PATCH] Merge branch 'refs/heads/master' into master-手术随访

---
 smartor/src/main/java/com/smartor/domain/ServiceSubtask.java                                          |    3 
 smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java            |   44 +
 smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java                        |   33 
 ruoyi-admin/src/main/resources/application-sltd.yml                                                   |    3 
 smartor/src/main/java/com/smartor/service/impl/PatArchiveServiceImpl.java                             |   71 +++
 smartor/src/main/java/com/smartor/service/impl/PatMedOuthospServiceImpl.java                          |    3 
 smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java                           |    5 
 ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java                    |   36 -
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java                     |    9 
 smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java                         |   22 
 smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java                   |  107 ++++-
 smartor/src/main/java/com/smartor/domain/ServiceSubtaskCountReq.java                                  |    2 
 smartor/src/main/java/com/smartor/mapper/SvyTaskTemplateMapper.java                                   |    2 
 smartor/src/main/resources/mapper/smartor/ServiceOutPathMapper.xml                                    |   57 +-
 smartor/src/main/java/com/smartor/domain/ServiceSubTaskAnswerReq.java                                 |    3 
 ruoyi-admin/src/main/resources/application.yml                                                        |   14 
 smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml                                    |   25 
 smartor/src/main/java/com/smartor/domain/VO/ServiceSubtaskVO.java                                     |    4 
 smartor/src/main/java/com/smartor/domain/PatMedOuthosp.java                                           |    2 
 smartor/src/main/java/com/smartor/service/impl/XHGatherPatArchiveServiceImpl.java                     |    2 
 ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java                                          |   58 ++-
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java              |   43 +
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java                      |    2 
 smartor/src/main/java/com/smartor/domain/entity/ServiceSubtaskEntity.java                             |    4 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSLTDHealthcareRecordController.java |   11 
 ruoyi-admin/src/main/resources/application-druid.yml                                                  |   25 
 ruoyi-admin/src/main/java/com/ruoyi/web/component/RedisMqReceiver.java                                |   60 ++-
 smartor/src/main/java/com/smartor/domain/ServiceSubTaskMYDAnswerReq.java                              |    3 
 ruoyi-admin/src/main/resources/application-nhfy.yml                                                   |  256 ++++++++++++++
 smartor/src/main/java/com/smartor/domain/ServiceStatisticsRequest.java                                |    2 
 smartor/src/main/java/com/smartor/domain/MtSubmitSmResp.java                                          |   38 ++
 smartor/src/main/java/com/smartor/common/MtSubmitSmUtil.java                                          |  114 ++++++
 32 files changed, 858 insertions(+), 205 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/component/RedisMqReceiver.java b/ruoyi-admin/src/main/java/com/ruoyi/web/component/RedisMqReceiver.java
index 7324a94..c5bdd02 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
@@ -23,6 +23,7 @@
 import com.ruoyi.system.domain.SysConfig;
 import com.ruoyi.system.service.ISysConfigService;
 import com.smartor.common.LSHospTokenUtil;
+import com.smartor.common.MtSubmitSmUtil;
 import com.smartor.domain.*;
 import com.smartor.domain.entity.ServiceSubtaskEntity;
 import com.smartor.mapper.*;
@@ -114,6 +115,9 @@
 
     @Value("${spring.profiles.active}")
     private String active;
+
+    @Autowired
+    private MtSubmitSmUtil mtSubmitSmUtil;
 
     @Autowired
     private ISysConfigService configService;
@@ -307,7 +311,7 @@
                         iServiceOutPathService.updateServiceOutPath(serviceOutPath);
                         sendMagParam.setPhone(serviceSubtask.getPhone());
                         sendMagParam.setUrl(ip + ":" + req_path + "/sf?p=" + format);
-                        if (active.equals("ls") || active.equals("sltd")) {
+                        if (active.equals("ls") || active.equals("sltd") || active.equals("nhfy")) {
                             sendMagParam.setContent("鎮ㄥソ锛岄個璇锋偍濉啓鍑洪櫌闅忚璋冩煡琛紝璇风偣鍑�" + sendMagParam.getUrl() + "鏌ョ湅銆傛劅璋㈡偍閰嶅悎锛�");
                         } else if (active.equals("xh")) {
                             sendMagParam.setContent("銆愭柊鍗庡尰闄€�戞偍濂斤紝閭�璇锋偍濉啓鍑洪櫌闅忚璋冩煡琛紝璇风偣鍑�" + sendMagParam.getUrl() + "濉啓銆傛劅璋㈡偍閰嶅悎锛�");
@@ -331,12 +335,12 @@
                         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);
+                        sendMagParam.setUrl(StringUtils.isNotEmpty(req_path) ? ip + ":" + req_path + "/wt?p=" + format : ip + "/wt?p=" + format);
                         log.info("sendMagParam鐨勫�间负锛歿}", sendMagParam);
                         //濡傛灉type鏄闊抽殢璁跨殑璇濓紙璇存槑琛ュ伩鍙戦�佹柟寮忎腑鏈夌數璇濋殢璁跨殑鏂瑰紡锛岃繖閲岀殑澶栭摼灏卞湴鍧�鍙兘鐢�/sf锛�
                         if (serviceSubtask.getType().equals("1"))
-                            sendMagParam.setUrl(ip + ":" + req_path + "/sf?p=" + format);
-                        if (active.equals("ls") || active.equals("sltd")) {
+                            sendMagParam.setUrl(StringUtils.isNotEmpty(req_path) ? ip + ":" + req_path + "/sf?p=" + format : ip + "/sf?p=" + format);
+                        if (active.equals("ls") || active.equals("sltd") || active.equals("nhfy")) {
                             sendMagParam.setContent("鎮ㄥソ锛岄個璇锋偍濉啓鍑洪櫌璋冩煡琛紝璇风偣鍑�" + sendMagParam.getUrl() + "鏌ョ湅銆傛劅璋㈡偍閰嶅悎锛�");
                         } else if (active.equals("xh")) {
                             sendMagParam.setContent("銆愭柊鍗庡尰闄€�戞偍濂斤紝閭�璇锋偍濉啓鍑洪櫌璋冩煡琛紝璇风偣鍑�" + sendMagParam.getUrl() + "濉啓銆傛劅璋㈡偍閰嶅悎锛�");
@@ -362,8 +366,8 @@
                         HeLibrary heLibrary = heLibraryMapper.selectHeLibraryById(serviceSubtask.getLibtemplateid());
                         if (heLibrary.getHetype().equals("1")) {
                             sendMagParam.setPhone(serviceSubtask.getPhone());
-                            sendMagParam.setUrl(ip + ":" + req_path + "/xj?p=" + format);
-                            if (active.equals("ls") || active.equals("sltd")) {
+                            sendMagParam.setUrl(StringUtils.isNotEmpty(req_path) ? ip + ":" + req_path + "/xj?p=" + format : ip + "/xj?p=" + format);
+                            if (active.equals("ls") || active.equals("sltd") || active.equals("nhfy")) {
                                 sendMagParam.setContent("鎮ㄥソ锛岄個璇锋偍濉啓鍑洪櫌瀹f暀璋冩煡琛紝璇风偣鍑�" + sendMagParam.getUrl() + "鏌ョ湅銆傛劅璋㈡偍閰嶅悎锛�");
                             } else if (active.equals("xh")) {
                                 sendMagParam.setContent("銆愭柊鍗庡尰闄€�戞偍濂斤紝閭�璇锋偍濉啓鍑洪櫌瀹f暀璋冩煡琛紝璇风偣鍑�" + sendMagParam.getUrl() + "鏌ョ湅銆傛劅璋㈡偍閰嶅悎锛�");
@@ -425,23 +429,37 @@
                             setFailPreachForm(serviceSubtask, sendPreachform, "鐭俊鍙戦�佸け璐�", "5");
                             throw new BaseException("鐭俊鍙戦�佸け璐�");
                         }
-                    } else if (active.equals("sltd")) {
+                    } else if (active.equals("sltd") || active.equals("nhfy")) {
                         //鐪佺珛鍚屽痉鐨勭煭淇″彂閫佹柟寮�
-                        String data = MessageSend.sendMsg(sendMagParam.getContent(), "6", sendMagParam.getPhone(), LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
-                        if (StringUtils.isNotEmpty(data)) {
-                            ObjectMapper mapper = new ObjectMapper();
-                            JsonNode root = mapper.readTree(data);
-                            String status = root.get("result").get(0).get("status").asText();
-                            if (status.equals("00000")) {
-                                s = "true";
+                        String data = null;
+                        Map<String, Object> smsResult = null;
+                        if (active.equals("sltd")) {
+                            data = MessageSend.sendMsg(sendMagParam.getContent(), "6", sendMagParam.getPhone(), LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
+                            if (StringUtils.isNotEmpty(data)) {
+                                ObjectMapper mapper = new ObjectMapper();
+                                JsonNode root = mapper.readTree(data);
+                                String status = root.get("result").get(0).get("status").asText();
+                                if (status.equals("00000")) {
+                                    s = "true";
+                                } else {
+                                    setFailPreachForm(serviceSubtask, sendPreachform, "鐭俊鍙戦�佸け璐�: " + data, "5");
+                                    throw new BaseException("鐭俊鍙戦�佸け璐�");
+                                }
+
                             } else {
                                 setFailPreachForm(serviceSubtask, sendPreachform, "鐭俊鍙戦�佸け璐�: " + data, "5");
                                 throw new BaseException("鐭俊鍙戦�佸け璐�");
                             }
-                        } else {
-                            setFailPreachForm(serviceSubtask, sendPreachform, "鐭俊鍙戦�佸け璐�: " + data, "5");
-                            throw new BaseException("鐭俊鍙戦�佸け璐�");
+                        } else if (active.equals("nhfy")) {
+                            smsResult = mtSubmitSmUtil.submitSm(sendMagParam.getPhone(), sendMagParam.getContent());
+                            if (smsResult != null && smsResult.get("result") != null && smsResult.get("result").toString().equals("0")) {
+                                s = "true";
+                            } else {
+                                setFailPreachForm(serviceSubtask, sendPreachform, "鐭俊鍙戦�佸け璐�", "5");
+                                throw new BaseException("鐭俊鍙戦�佸け璐�");
+                            }
                         }
+
                     } else if (active.equals("hzszlyy")) {
                         //甯備竴
                         long timestamp = new Date().getTime();
@@ -531,7 +549,7 @@
                         serviceOutPath.setRadix(format);
                         serviceOutPath.setUpdateTime(new Date());
                         iServiceOutPathService.updateServiceOutPath(serviceOutPath);
-                        url = ip + ":" + req_path + "/wt?p=" + format;
+                        url = StringUtils.isNotEmpty(req_path) ? ip + ":" + req_path + "/wt?p=" + format : ip + "/wt?p=" + format;
                         //濡傛灉type鏄闊抽殢璁跨殑璇濓紙璇存槑琛ュ伩鍙戦�佹柟寮忎腑鏈夌數璇濋殢璁跨殑鏂瑰紡锛岃繖閲岀殑澶栭摼灏卞湴鍧�鍙兘鐢�/sf锛�
                         if (serviceSubtask.getType().equals("1"))
                             sendMagParam.setUrl(ip + ":" + req_path + "/sf?p=" + format);
@@ -845,9 +863,9 @@
                     if (failSendstate.equals("4") || failSendstate.equals("5")) {
                         serviceSubtask.setCurrentPreachform(preachform);
                         serviceSubtask.setSendstate(5L);
-                        serviceSubtask.setRemark("setFailPreachForm鏂规硶 褰撳墠鐨刾reachform宸茬粡鏄渶鍚庝竴涓簡锛屽叏閮ㄦ墽琛屽け璐�");
+                        serviceSubtask.setRemark("澶勭悊琛ュ伩浠诲姟,褰撳墠澶勭悊鏈�鍚庤ˉ鍋匡紝鍏ㄩ儴鎵ц澶辫触");
                         //浜哄伐鍙戦�佽秴鏃�
-                        if(ObjectUtils.isNotEmpty(preachform) && preachform.equals("1") && failSendstate.equals("7")){
+                        if (ObjectUtils.isNotEmpty(preachform) && preachform.equals("1") && failSendstate.equals("7")) {
                             serviceSubtask.setSendstate(7L);
                             serviceSubtask.setRemark("浜哄伐鍙戦�佽秴鏃�");
                         }
@@ -865,7 +883,7 @@
         serviceSubtask.setVisitTime(getNextVisitTime(serviceSubtask.getId(), serviceSubtask.getTaskid(), serviceSubtask.getVisitTime(), serviceSubtask.getCurrentPreachform()));
         serviceSubtask.setSendstate(3L);
         //浜哄伐鍙戦�佽秴鏃�
-        if(ObjectUtils.isNotEmpty(preachform) && preachform.equals("1") && failSendstate.equals("7")){
+        if (ObjectUtils.isNotEmpty(preachform) && preachform.equals("1") && failSendstate.equals("7")) {
             serviceSubtask.setSendstate(7L);
             serviceSubtask.setRemark("浜哄伐鍙戦�佽秴鏃�");
         }
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 1e24d92..363f367 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,8 @@
 
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
+import com.smartor.common.MtSubmitSmUtil;
+import com.smartor.domain.MtSubmitSmResp;
 import com.smartor.domain.ServiceSLTDDeptReqVO;
 import com.smartor.domain.ServiceSLTDInhospReqVO;
 import com.smartor.domain.ServiceSLTDInhospResDTO;
@@ -10,12 +12,10 @@
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 鐪佺珛鍚屽痉鍋ュ悍璁板綍鏌ヨController
@@ -32,6 +32,9 @@
     @Autowired
     private IServiceSLTDHealthcareRecordService serviceSLTDHealthcareRecordService;
 
+    @Autowired
+    private MtSubmitSmUtil mtSubmitSmUtil;
+
     /**
      * 鏌ヨ鍦ㄩ櫌鎮h�呭仴搴疯褰曞垪琛�
      */
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 e9abbe2..e56e2f7 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
@@ -119,16 +119,6 @@
         // 鐩存帴浠庡凡鏈夎仛鍚堢粨鏋滄帹绠梩otal锛岄伩鍏嶅幓鎺夊垎椤靛悗鍐嶅叏閲忔煡涓�閬嶅ぇ琛�
         long total = 0L;
         try {
-//                 * wzx: 鏈墽琛屾暟閲�
-//                    * ysf: 宸查殢璁挎暟閲�
-//                    * fssb: 鍙戦�佸け璐ユ暟閲�
-//                    * yfs: 宸插彂閫佹暟閲�
-//                    * dsf: 寰呴殢璁挎暟閲�
-
-//            long wzx = map.get("wzx") != null ? ((Number) map.get("wzx")).longValue() : 0L;
-//            long ysf = map.get("ysf") != null ? ((Number) map.get("ysf")).longValue() : 0L;
-//            long dsf = map.get("dsf") != null ? ((Number) map.get("dsf")).longValue() : 0L;
-//            long fssb = map.get("fssb") != null ? ((Number) map.get("fssb")).longValue() : 0L;
             total = map.get("total") != null ? ((Number) map.get("total")).longValue() : 0L;
 
         } catch (Exception e) {
@@ -185,7 +175,7 @@
                 if (ObjectUtils.isNotEmpty(oldCondition) && isSameCondition(oldCondition, serviceSubtaskEntity)) {
                     redisFlag = true;
                     map = redisMap;
-                    redisCache.setCacheObject(userId + "patItemCount", map, 120, TimeUnit.MINUTES);
+                    redisCache.setCacheObject(userId + "patItemCount", map, 60, TimeUnit.MINUTES);
                 }
             }
             if (!redisFlag) {
@@ -447,6 +437,37 @@
     }
 
     /**
+     * 鏂板鎴栦慨鏀瑰垹闄ゅ崟涓�浠诲姟(涓存椂鎺ュ彛)
+     */
+    @ApiOperation("鏂板鎴栦慨鏀瑰垹闄ゅ崟涓�浠诲姟(涓存椂鎺ュ彛)")
+    //@PreAuthorize("@ss.hasPermi('system:task:add')")
+    @Log(title = "鍗曚竴浠诲姟锛堥殢璁匡級", businessType = BusinessType.INSERT)
+    @AddOrgId(field = "orgid", paramIndex = 0, campusField = "campusid")
+    @PostMapping("/insertOrUpdateTaskByTaskId")
+    public AjaxResult insertOrUpdateTaskByTaskId(@RequestBody ServiceTaskVO ivrTaskVO) {
+        log.info("insertOrUpdateTaskByTaskId鐨勫叆鍙備负锛歿}", ivrTaskVO);
+        LoginUser loginUser = getLoginUser();
+        SysUser user = loginUser.getUser();
+        ivrTaskVO.setCreateBy(user.getNickName());
+        ivrTaskVO.setUpdateBy(user.getNickName());
+        ivrTaskVO.setOrgid(user.getOrgid());
+        //鏍规嵁鍏ュ弬鏌ヨ淇℃伅-鐢ㄦ埛鍏崇郴
+        ServiceSubtask serviceSubtask = new ServiceSubtask();
+        if(ObjectUtils.isNotEmpty(ivrTaskVO.getTaskid())){
+            serviceSubtask.setTaskid(ivrTaskVO.getTaskid());
+            serviceSubtask.setOrgid(user.getOrgid());
+            serviceSubtask.setCampusid(user.getCampusid());
+            ServiceTaskVO ivrTaskVO1 = serviceSubtaskService.queryTaskByCondition(serviceSubtask);
+            ivrTaskVO.setPatTaskRelevances(ivrTaskVO1.getPatTaskRelevances());
+
+            return success(serviceSubtaskService.insertOrUpdateTask(ivrTaskVO));
+        }else {
+            return error("insertOrUpdateTaskByTaskId taskid涓嶅彲涓虹┖");
+        }
+
+    }
+
+    /**
      * 鐢佃瘽鍥炶皟浠诲姟(涓婃捣)
      */
     @ApiOperation("鐢佃瘽鍥炶皟浠诲姟")
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 fc8b79d..c8d149a 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,5 +1,6 @@
 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;
@@ -97,12 +98,12 @@
      */
 //    @IpWhitelist
     @GetMapping("/SSOLogin")
-    public RedirectView SSOLogin(@RequestParam(required = false) String userName,
-                                 @RequestParam(required = false) String orgid,
-                                 @RequestParam(required = false) String campusid,
+    public RedirectView SSOLogin(@RequestParam(required = false) String campusid,
                                  @RequestParam(required = false) String deptId,
+                                 String orgid,
+                                 String userName,
                                  String token) {
-        if (StringUtils.isEmpty(userName) && StringUtils.isEmpty(token)) {
+        if (StringUtils.isEmpty(userName) && StringUtils.isEmpty(token) && StringUtils.isEmpty(orgid)) {
             throw new BaseException("鍙傛暟涓嶈兘涓虹┖");
         }
 
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 0b12ecf..103134f 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
@@ -155,7 +155,7 @@
      */
     //@PreAuthorize("@ss.hasPermi('system:role:edit')")
     @Log(title = "瑙掕壊绠$悊", businessType = BusinessType.UPDATE)
-    @PostMapping("/changeStatus")
+    @PostMapping("/changeStatus/edit")
     public AjaxResult changeStatus(@RequestBody SysRole role) {
         roleService.checkRoleAllowed(role);
         roleService.checkRoleDataScope(role.getRoleId());
diff --git a/ruoyi-admin/src/main/resources/application-druid.yml b/ruoyi-admin/src/main/resources/application-druid.yml
index 3669f6b..d211d4f 100644
--- a/ruoyi-admin/src/main/resources/application-druid.yml
+++ b/ruoyi-admin/src/main/resources/application-druid.yml
@@ -6,7 +6,7 @@
     druid:
       # 涓诲簱鏁版嵁婧�
       master:
-        #    涔変箤浜岄櫌
+        #        涔変箤浜岄櫌
         #        url: jdbc:mysql://127.0.0.1:3306/smartor?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         #        username: root
         #        password: 123456
@@ -34,7 +34,7 @@
         #        password: Hxerp2000
         #        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
+        url: jdbc:mysql://haiershi.a1.luyouxia.net:23844/smartor_xinhua?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&connectTimeout=120000&socketTimeout=240000
         username: smartor
         password: Smartor.2023
         driverClassName: com.mysql.cj.jdbc.Driver
@@ -78,7 +78,11 @@
       # 鏈�澶ц繛鎺ユ睜鏁伴噺
       maxActive: 20
       # 閰嶇疆鑾峰彇杩炴帴绛夊緟瓒呮椂鐨勬椂闂�
-      maxWait: 60000
+      maxWait: 120000
+      # 閰嶇疆杩炴帴瓒呮椂鏃堕棿锛堟绉掞級锛岄槻姝㈡參鏌ヨ瀵艰嚧杩炴帴鏂紑
+      queryTimeout: 120
+      # 閰嶇疆杩炴帴鏈夋晥鎬ф娴嬭秴鏃�
+      validationQueryTimeout: 5
       # 閰嶇疆闂撮殧澶氫箙鎵嶈繘琛屼竴娆℃娴嬶紝妫�娴嬮渶瑕佸叧闂殑绌洪棽杩炴帴锛屽崟浣嶆槸姣
       timeBetweenEvictionRunsMillis: 60000
       # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�灏忕敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣
@@ -105,8 +109,8 @@
         stat:
           enabled: false
           # 鎱QL璁板綍
-          log-slow-sql: false
-          slow-sql-millis: 1000
+          log-slow-sql: true
+          slow-sql-millis: 3000
           merge-sql: true
         wall:
           config:
@@ -148,7 +152,7 @@
 # Swagger閰嶇疆
 swagger:
   # 鏄惁寮�鍚痵wagger
-  enabled: true
+  enabled: false
   # 璇锋眰鍓嶇紑
   pathMapping: /dev-api
 
@@ -215,10 +219,9 @@
 #  鎸囧畾asr鍥炶皟鐨剈rl璺緞(鏈湴)
 ASRCallBackPath: http://192.168.100.10:8095/smartor/serviceSubtask/phoneCallBackYQ
 #鎸傛柇IP(鏈湴)
-hangup: http://192.168.100.6:8089/hangup
+hangup: http://192.168.100.10:8089/hangup
 #fs鎵�浣跨敤鐨勯樋閲岀殑app_key(鏈湴)
 app_key_yq: ZurNHpaQLq6P55YS
-
 ##  鎸囧畾asr鍥炶皟鐨剈rl璺緞(鏂板崕)
 #ASRCallBackPath: http://192.168.101.135:8095/smartor/serviceSubtask/phoneCallBackYQ
 ##鎸傛柇IP(鏂板崕)
@@ -255,7 +258,7 @@
 #绗釜灏忔椂鐢佃瘽鎷ㄦ墦鐨勪笂闄�
 phoneUpEveryHour: 12
 #鐢佃瘽姣忓ぉ缁撴潫鏃堕棿
-phoneEndHour: 20
+phoneEndHour: 23
 
 #鏂板憳宸ラ粯璁ゅ瘑鐮�
 defaultPwd: 123456
@@ -267,10 +270,12 @@
 isAdmin: 1,2,3,4,5,6,7,8,9,10,11,12,13
 
 
-isEncryp:
+isEncryp: 0
 
 dealDeptCode:
 
 #鏂囦欢涓婁紶鍦板潃
 fileUpload:
 profile:
+
+ai_answer: http://localhost:8088/ai_answer
diff --git a/ruoyi-admin/src/main/resources/application-nhfy.yml b/ruoyi-admin/src/main/resources/application-nhfy.yml
new file mode 100644
index 0000000..6f97acf
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/application-nhfy.yml
@@ -0,0 +1,256 @@
+# 鏁版嵁婧愰厤缃�
+spring:
+  datasource:
+    type: com.alibaba.druid.pool.DruidDataSource
+    #    driverClassName: com.mysql.cj.jdbc.Driver
+    druid:
+      # 涓诲簱鏁版嵁婧�
+      master:
+        #        鍗楀崕闄勪竴
+        url: jdbc:mysql://192.168.99.192:3306/smartor_nhfy?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&connectTimeout=60000&socketTimeout=120000
+        username: root
+        password: Smartor.2023
+        driverClassName: com.mysql.cj.jdbc.Driver
+
+      #        # 楂樻柉鏁版嵁搴撻厤缃�
+      #        url: jdbc:postgresql://127.0.0.1:5432/smartorlishui
+      #        username: gaussdb
+      #        password: Ls@123456
+      #        driverClassName: org.postgresql.Driver
+
+      # 浠庡簱鏁版嵁婧�
+      slave:
+      # 浠庢暟鎹簮寮�鍏�/榛樿鍏抽棴(鍏徃)
+      # 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://127.0.0.1:1433;DatabaseName=IntelligentVoice;encrypt=false;SelectMethod=cursor
+      # username: sa
+      # password: sfxt#2023
+      # driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
+
+      # 鍒濆杩炴帴鏁�
+      initialSize: 5
+      # 鏈�灏忚繛鎺ユ睜鏁伴噺
+      minIdle: 10
+      # 鏈�澶ц繛鎺ユ睜鏁伴噺
+      maxActive: 20
+      # 閰嶇疆鑾峰彇杩炴帴绛夊緟瓒呮椂鐨勬椂闂�
+      maxWait: 60000
+      # 閰嶇疆闂撮殧澶氫箙鎵嶈繘琛屼竴娆℃娴嬶紝妫�娴嬮渶瑕佸叧闂殑绌洪棽杩炴帴锛屽崟浣嶆槸姣
+      timeBetweenEvictionRunsMillis: 60000
+      # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�灏忕敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣
+      minEvictableIdleTimeMillis: 300000
+      # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�澶х敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣
+      maxEvictableIdleTimeMillis: 900000
+      # 閰嶇疆妫�娴嬭繛鎺ユ槸鍚︽湁鏁�
+      validationQuery: SELECT 1 FROM DUAL
+      #      validationQuery: SELECT 1
+      testWhileIdle: true
+      testOnBorrow: false
+      testOnReturn: false
+      webStatFilter:
+        enabled: true
+      statViewServlet:
+        enabled: false
+        # 璁剧疆鐧藉悕鍗曪紝涓嶅~鍒欏厑璁告墍鏈夎闂�
+        allow:
+        url-pattern: /druid/*
+        # 鎺у埗鍙扮鐞嗙敤鎴峰悕鍜屽瘑鐮�
+        login-username: lihu
+        login-password: Lihu@1363419#$
+      filter:
+        stat:
+          enabled: false
+          # 鎱QL璁板綍
+          log-slow-sql: false
+          slow-sql-millis: 1000
+          merge-sql: true
+        wall:
+          config:
+            multi-statement-allow: true
+  # redis 閰嶇疆
+  redis:
+    host: 127.0.0.1
+    port: 6020
+
+    # 鏁版嵁搴撶储寮�
+    database: 0
+    # 瀵嗙爜
+    password: Smartor
+    # 杩炴帴瓒呮椂鏃堕棿
+    timeout: 10s
+    lettuce:
+      pool:
+        # 杩炴帴姹犱腑鐨勬渶灏忕┖闂茶繛鎺�
+        min-idle: 0
+        # 杩炴帴姹犱腑鐨勬渶澶х┖闂茶繛鎺�
+        max-idle: 8
+        # 杩炴帴姹犵殑鏈�澶ф暟鎹簱杩炴帴鏁�
+        max-active: 8
+        # #杩炴帴姹犳渶澶ч樆濉炵瓑寰呮椂闂达紙浣跨敤璐熷�艰〃绀烘病鏈夐檺鍒讹級
+        max-wait: -1ms
+
+# Swagger閰嶇疆
+swagger:
+  # 鏄惁寮�鍚痵wagger
+  enabled: false
+  # 璇锋眰鍓嶇紑
+  pathMapping: /dev-api
+
+# PageHelper鍒嗛〉鎻掍欢
+#pagehelper:
+#  helperDialect: mysql
+#  supportMethodsArguments: true
+#  params: count=countSql
+
+magic-api:
+  web: /magic/web
+  resource:
+    type: database   # 閰嶇疆瀛樺偍鍦ㄦ暟鎹簱涓�
+    tableName: magic_config  # 鏁版嵁搴撲腑鐨勮〃鍚�
+    prefix: /api
+    readonly: false
+  sql-column-case: camel
+  show-sql: true #閰嶇疆鎵撳嵃SQL
+  page-config:
+    size: size
+    page: page
+    default-page: 1
+    default-size: 10
+
+#閽夐拤鐨勫瘑閽�
+dingAppid: dingn8iip5ubj7clrrsv
+dingAppSecret: qlEK8D3oOVwGPOTiBQIBYTqQVlAfy9S_qQizEQFjJdSScwemWFryg4gbneu-NqWD
+
+# websocket瓒呮椂鏃堕棿
+server:
+websocket:
+timeout=60000:
+
+
+accessKeyId: LTAI5tPfc1VJzz7VuhzcBwug
+accessKeySecret: gG1srKxPFDBNWe2oHfqmK1qsSQkf1e
+signName: 鏉窞鍒╂箹绉戞妧
+
+#鏅鸿兘鍛煎彨(涓婃捣)
+phoneIP: http://124.220.50.51
+phonePort: 8001
+#鏉窞
+hzphoneIP: http://121.43.112.160
+hzphonePort: 8088
+#鐢佃瘽绾胯矾锛�1 涓婃捣锛�2 鏉窞锛�
+phonePath: 2
+#鑷繁鐨勭數璇濆彿鐮�
+phoneMySelf: 83234089
+##鎺堟潈 id(鏉窞)
+#app_id: hzgs
+##鎺堟潈 key(宸插姞瀵嗚繃鐨� key)(鏉窞)
+#app_key: 605453540c4a0a692fe07e1cae1162f3
+#鎺堟潈 id(鏉窞)
+app_id: hz_ali
+#鎺堟潈 key(宸插姞瀵嗚繃鐨� key)(鏉窞)
+app_key: a2f3b5799d635216aa280362fafd8c35
+
+
+pub_key: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALQzqW1EIXBKGMu+2oEYSB5gM7Ox/ihyYTeeoE0yPX1qtt4++5yNOeTBVd6EEM4iKzVEzWj6REIWVwaSNPn/SvUCAwEAAQ==
+#杩欎釜鏄悗绔殑绉侀挜锛岀敤涓嶅埌
+pri_key: MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEAtDOpbUQhcEoYy77agRhIHmAzs7H+KHJhN56gTTI9fWq23j77nI055MFV3oQQziIrNUTNaPpEQhZXBpI0+f9K9QIDAQABAkB3n0fcWfrcoMN/FU3VnrnZOEF6CzFNxkgU9P8y36QECWKZ9JhYQkNpKrMC9oXlN3VSaRigV7B+L/I/a0Rs1W+tAiEA4jx7xcXJ4y4BNwAmVHt6NNiEkzIwWnwC/0qsEu8NsOsCIQDL6MMn1D2uznC6OuOWpxDCkBh1JL1NzZTZeH2G+hj7nwIgKGAC9tjFnvWm4dn0/T7MIIJDpsFeP8fCAS2iZ/6hwuECIAS/eLvWr1EAsZNEh8QcQ8GkBU3E+ztyjAK8UX/xFt/VAiBf79/1tDErX4/DChecM8w3c3DhbBcjuE3fHZn7p6/UKg==
+#鍓嶇绉侀挜锛堢敤涓嶅埌浜嗭級
+#pri_key: MIIBVQIBADANBgkqhkiG9w0BAQEFAASCAT8wggE7AgEAAkEApHTIe/StslZAT5Jzv8XClbrqox32pfaTrP5IOCRJ3FaH/UZsGgA/tsNBBEXq9eagqwPbJrjYfpdEtINcChrK4wIDAQABAkEAilDujdKshGGmlUZHs/NQRT6AOdDpsYxBiC4V76IVvQpw0IW6c4HGEvH4T+xRufika7/48L0eu0f06H+YtL5lgQIhANUd0a6oSsVxWifAjtKwMZcXD3OaIxQIQSCN4NT4VFY3AiEAxYxYrIhkIyg+UVw3WOSvBpXKxM4/WL9HRzkxDLvp2rUCIQCK23P8tgCJ5xJT5l3onw6goFDcBKkoazxsBqVgfjENPwIgWbuTd+OIYPPhwsE5ntZZrosSDO2GlsBkFzUiU59z7VUCIA0LL+9IFb+FWCl3DGTwIQ9SZYbv61T83LKjebUcSOfe
+
+#浜岀淮鐮佽矾寰�
+qrpath: D:\qrcode
+
+
+#澶栭摼璇锋眰IP鍜岀鍙e彿
+req_path:
+localIP: https://xiniuhisintcus.nhfyyy.com/aifollowup
+
+
+#鑾峰彇鎮h�呬俊鎭疷RL(鍗庡崜鎻愪緵)
+hosp_info_url: http://esb-core-rest.wowjoy.cn/esb/exchange
+
+# 0浠h〃璧伴粯璁ょ殑涓婁紶    1 浠g爜璧版柊鍗庡尰闄㈢殑涓婁紶
+uploadSwitch: 1
+
+#  鎸囧畾asr鍥炶皟鐨剈rl璺緞(鏂板崕)
+ASRCallBackPath: http://192.168.101.135:8095/smartor/serviceSubtask/phoneCallBackYQ
+#鎸傛柇IP(鏂板崕)
+hangup: http://192.16.4.220:8091/hangup
+#fs鎵�浣跨敤鐨勯樋閲岀殑app_key(鏂板崕)
+app_key_yq: ZurNHpaQLq6P55YS
+
+#鐭俊璇锋眰鍦板潃(杩欓噷涓虹┖锛屽悓寰锋彁渚涚殑鏄痺s)
+xhsmsPath:
+#甯愬彿
+xhsmsAccount:
+#鎺ュ彛瀵嗙爜
+xhsmsPwd:
+#铏氭嫙鎺ュ叆鐮�
+xhsmsjrm:
+
+##鏈湴FTP杩炴帴
+#FTP_SERVER: "192.168.2.13"
+#FTP_USERNAME: voice
+#FTP_PASSWORD: xh@2023
+
+#鏂板崕FTP杩炴帴
+FTP_SERVER: "192.16.4.220"
+FTP_USERNAME: voice
+FTP_PASSWORD: xh@2023
+
+#璇煶鍦板潃璁块棶鍓嶇紑(鏂板崕)
+voicePathPrefix: http://192.168.191.181:8095/profile/upload/vadio/
+#璇煶鍦板潃璁块棶鍓嶇紑(鍏徃)
+#voicePathPrefix: http://192.168.2.13:8095/profile/upload/vadio/
+
+#绗釜灏忔椂鐢佃瘽鎷ㄦ墦鐨勪笂闄�
+phoneUpEveryHour: 12
+#鐢佃瘽姣忓ぉ缁撴潫鏃堕棿
+phoneEndHour: 20
+
+#鏂板憳宸ラ粯璁ゅ瘑鐮�
+defaultPwd: 123456
+
+#鏄惁闇�瑕佹牴鎹柧鐥呭缓绔嬪嚭闄㈡偅鑰呴殢璁�
+createIcd10Visit: false
+
+#admin绠$悊鍛榰serId
+isAdmin: 1,2,3,4,5,6,7,8,9,10,11,12,13
+
+#鐢ㄦ埛榛樿瀵嗙爜
+userPwd: nhfy@0230
+
+#澶勭悊鎶曡瘔寤鸿鐨勯儴闂ㄧ紪鐮�
+dealDeptCode: 40003024
+
+
+#鏄惁鍔犲瘑  0涓嶅姞   1鍔犲瘑
+isEncryp: 0
+
+#鏂囦欢涓婁紶鍦板潃
+fileUpload: https://xiniuhisintcus.nhfyyy.com/aifollowup
+profile: /prod-api/profile
+
+# 鏉ユ湭鏉pp_key
+lwl_app_key: ak-LMyQUE4rjW25UO7otb8XMXzv
+
+# 鍗楀崕闄勪竴鍙栨暟鎹叕鍏辨帴鍙�
+sltd_pub_path: "http://open.nhyfy.cn/kapi/gw-api/"
+
+sms_accountName: S200232
+sms_password: lD94Yo
+sms_url: http://open.nhyfy.cn/kapi/gw-api/hntypt/ucpmsg/send
+sms_sourceAddr: 1069100020341
+sms_serviceCode: PUSH
+sms_appkey: ak-BFq4NN0TMf92J7KAioNYGz74
+sms_flag: 銆愬崡鍗庡ぇ瀛﹂檮灞炵涓�鍖婚櫌銆�
+
+
+
diff --git a/ruoyi-admin/src/main/resources/application-sltd.yml b/ruoyi-admin/src/main/resources/application-sltd.yml
index e8fd437..e145f70 100644
--- a/ruoyi-admin/src/main/resources/application-sltd.yml
+++ b/ruoyi-admin/src/main/resources/application-sltd.yml
@@ -244,3 +244,6 @@
 #鏂囦欢涓婁紶鍦板潃
 fileUpload: http://192.88.117.236:8090
 profile: /prod-api/profile
+
+# 鏉ユ湭鏉pp_key
+lwl_app_key: ak-zUMiOWhqXiJQWPB1pCbz0pjr
diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
index 0f69eba..b8237e5 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: ls
+    active: durid
 
   # 鏂囦欢涓婁紶
   servlet:
@@ -115,6 +115,8 @@
   mapperLocations: classpath*:mapper/**/*Mapper.xml
   # 鍔犺浇鍏ㄥ眬鐨勯厤缃枃浠�
   configLocation: classpath:mybatis/mybatis-config.xml
+  # 娉ㄥ唽鑷畾涔塗ypeHandler鍖�
+  typeHandlersPackage: com.smartor.typehandler
   #configuration:
   #  log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
 
@@ -160,3 +162,13 @@
 
 #鐢ㄦ埛榛樿瀵嗙爜
 userPwd: 123456
+
+#杩欎簺绌哄�奸兘鏄潵鏈潵鐨勫彉閲忥紝鍏堝崰浣�
+lwl_app_key:
+sms_accountName:
+sms_password:
+sms_url:
+sms_sourceAddr:
+sms_serviceCode:
+sms_appkey:
+sms_flag:
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 b13fa65..ef578e7 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
@@ -1,20 +1,6 @@
 package com.ruoyi.framework.web.service;
 
-import javax.annotation.Resource;
-
 import com.alibaba.fastjson2.JSONObject;
-import com.ruoyi.common.utils.HttpUtil;
-import com.ruoyi.common.utils.RSAPublicKeyExample;
-import com.smartor.service.impl.ServiceSLTDHealthcareRecordServiceImpl;
-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.authentication.AuthenticationManager;
-import org.springframework.security.authentication.BadCredentialsException;
-import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
-import org.springframework.security.core.Authentication;
-import org.springframework.stereotype.Component;
 import com.ruoyi.common.constant.CacheConstants;
 import com.ruoyi.common.constant.Constants;
 import com.ruoyi.common.core.domain.entity.SysUser;
@@ -24,17 +10,24 @@
 import com.ruoyi.common.exception.user.CaptchaException;
 import com.ruoyi.common.exception.user.CaptchaExpireException;
 import com.ruoyi.common.exception.user.UserPasswordNotMatchException;
-import com.ruoyi.common.utils.DateUtils;
-import com.ruoyi.common.utils.MessageUtils;
-import com.ruoyi.common.utils.ServletUtils;
-import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.*;
 import com.ruoyi.common.utils.ip.IpUtils;
 import com.ruoyi.framework.manager.AsyncManager;
 import com.ruoyi.framework.manager.factory.AsyncFactory;
 import com.ruoyi.framework.security.context.AuthenticationContextHolder;
 import com.ruoyi.system.service.ISysConfigService;
 import com.ruoyi.system.service.ISysUserService;
+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.authentication.AuthenticationManager;
+import org.springframework.security.authentication.BadCredentialsException;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.Authentication;
+import org.springframework.stereotype.Component;
 
+import javax.annotation.Resource;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -75,6 +68,9 @@
 
     @Value("${spring.profiles.active}")
     private String active;
+
+    @Value("${lwl_app_key}")
+    private String APP_KEY;
 
     /**
      * 鐧诲綍楠岃瘉
@@ -134,7 +130,7 @@
      */
     public String ssoLogin(String userName, String orgid, String deptId, String campusid, String token) {
         // sltd 鐜锛氶�氳繃 SSO token 鑾峰彇鍛樺伐璐﹀彿
-        if ("sltd".equals(active)) {
+        if ("sltd".equals(active) || "nhfy".equals(active)) {
             userName = resolveUserNameBySltdToken(token);
             if (userName == null) {
                 return null;
@@ -166,7 +162,7 @@
      */
     private String resolveUserNameBySltdToken(String token) {
         Map<String, String> headers = new HashMap<>();
-        headers.put("app-key", ServiceSLTDHealthcareRecordServiceImpl.APP_KEY);
+        headers.put("app-key", APP_KEY);
         Map<String, String> requestParams = new HashMap<>();
         requestParams.put("token", token);
         String reqData = HttpUtil.postFormRequest(sltdPubPath + "/checkSsoTokenId", requestParams, headers, null);
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 cddb8c3..854ebae 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
@@ -11,6 +11,7 @@
 import com.ruoyi.common.enums.MsgLSEnum;
 import com.ruoyi.common.enums.ServiceFromEnum;
 import com.ruoyi.common.enums.WxGZHEnum;
+import com.ruoyi.common.exception.base.BaseException;
 import com.ruoyi.common.utils.*;
 import com.ruoyi.common.utils.http.HttpUtils;
 import com.ruoyi.common.utils.sms.smsUtils;
@@ -19,6 +20,7 @@
 import com.ruoyi.system.domain.SysConfig;
 import com.ruoyi.system.service.ISysConfigService;
 import com.smartor.common.LSHospTokenUtil;
+import com.smartor.common.MtSubmitSmUtil;
 import com.smartor.domain.*;
 import com.smartor.domain.entity.ServiceSubtaskEntity;
 import com.smartor.mapper.*;
@@ -162,6 +164,8 @@
     @Value("${server.port}")
     private String port;
 
+    @Autowired
+    private MtSubmitSmUtil mtSubmitSmUtil;
 
     @Value("${spring.profiles.active}")
     private String active;
@@ -264,7 +268,9 @@
             } catch (Exception e) {
                 log.error("銆恉ealHisData銆戞渤鍗楁暟鎹噰闆嗗紓甯�", e);
             }
-        } else if (active.trim().equals("sltd")) {
+        } else if (active.trim().equals("sltd") || active.trim().equals("nhfy")) {
+            //鐪佺珛鍚屽痉涓庡崕鍗楅檮涓�鐢ㄥ悓涓�濂楅噰闆嗘柟娉曪紙閮芥槸鏉ユ湭鏉ユ彁渚涳級
+
             try {
                 //鑾峰彇鏄惁闇�瑕侀噰闆嗙敤鎴枫�侀儴闂ㄤ俊鎭�
                 SysConfig config = new SysConfig();
@@ -536,12 +542,12 @@
             ServiceSubtaskEntity serviceSubtaskVO = new ServiceSubtaskEntity();
             serviceSubtaskVO.setTaskid(commonTaskcallMQ.getTaskid());
             serviceSubtaskVO.setSendstate(2L);
+            serviceSubtaskVO.setIsVisitAgain(1);
             serviceSubtaskVO.setVisitTime(new Date());
             List<ServiceSubtask> selectServiceSubtaskList = serviceSubtaskMapper.queryServiceSubtaskList(serviceSubtaskVO);
             for (ServiceSubtask serviceSubtask : selectServiceSubtaskList) {
                 sfHandlle(serviceSubtask);
             }
-
         }
     }
 
@@ -599,11 +605,8 @@
 
                 //3.涓嶆槸鏈�鍚庝竴涓紝鑾峰彇鍒颁笅涓�涓墽琛屾柟寮�(鍥犱负閮芥槸鍦ㄤ粖澶╂墽琛岋紝閭e氨鐩存帴鍙戝嚭鍘诲氨瀹屼簡)
                 sfHandlle(serviceSubtask);
-
             }
-
         }
-
     }
 
 
@@ -649,7 +652,7 @@
         if (!Objects.isNull(patArchive) && patArchive.getNotrequiredFlag() == "1") {
             //涓嶉渶瑕佸彂閫�
             serviceSubtask.setResult("鎮h�呬笉闇�瑕侀殢璁�");
-            serviceSubtask.setRemark(patArchive.getNotrequiredreason());
+            serviceSubtask.setRemark("鎮h�呬笉闇�瑕侀殢璁�," + patArchive.getNotrequiredreason());
             serviceSubtask.setSendstate(4L);
             iServiceSubtaskService.insertServiceSubtask(serviceSubtask);
             setSuccessPreachForm(serviceSubtask, "-1", "涓嶉渶瑕佹墽琛�", "6");
@@ -745,10 +748,11 @@
                     //鍏堝垽鏂竴涓嬪彂鐨勬槸涓嶆槸瀹f暀
                     if (!"3".equals(serviceSubtask.getType())) {
                         sendMagParam.setPhone(serviceSubtask.getPhone());
-                        sendMagParam.setUrl(localIP + ":" + req_path + "/wt?p=" + format);
+
+                        sendMagParam.setUrl(StringUtils.isNotEmpty(req_path) ? localIP + ":" + req_path + "/wt?p=" + format : localIP + "/wt?p=" + format);
                         //濡傛灉type鏄闊抽殢璁跨殑璇濓紙璇存槑琛ュ伩鍙戦�佹柟寮忎腑鏈夌數璇濋殢璁跨殑鏂瑰紡锛岃繖閲岀殑澶栭摼灏卞湴鍧�鍙兘鐢�/sf锛�
                         if (serviceSubtask.getType().equals("1"))
-                            sendMagParam.setUrl(localIP + ":" + req_path + "/sf?p=" + format);
+                            sendMagParam.setUrl(StringUtils.isNotEmpty(req_path) ? localIP + ":" + req_path + "/sf?p=" + format : localIP + "/sf?p=" + format);
                         sendMagParam.setContent("鎮ㄥソ锛岄個璇锋偍濉啓鍑洪櫌璋冩煡琛紝璇风偣鍑�" + sendMagParam.getUrl() + "濉啓銆傛劅璋㈡偍閰嶅悎锛�");
                         if (active.equals("xh")) {
                             sendMagParam.setContent("銆愭柊鍗庡尰闄€�戞偍濂斤紝閭�璇锋偍濉啓鍑洪櫌璋冩煡琛紝璇风偣鍑�" + sendMagParam.getUrl() + "濉啓銆傛劅璋㈡偍閰嶅悎锛�");
@@ -757,8 +761,8 @@
                         HeLibrary heLibrary = heLibraryMapper.selectHeLibraryById(serviceSubtask.getLibtemplateid());
                         if (heLibrary.getHetype().equals("1")) {
                             sendMagParam.setPhone(serviceSubtask.getPhone());
-                            sendMagParam.setUrl(localIP + ":" + req_path + "/xj?p=" + format);
-                            if (active.equals("ls") || active.equals("sltd")) {
+                            sendMagParam.setUrl(StringUtils.isNotEmpty(req_path) ? localIP + ":" + req_path + "/xj?p=" + format : localIP + "/xj?p=" + format);
+                            if (active.equals("ls") || active.equals("sltd") || active.equals("nhfy")) {
                                 sendMagParam.setContent("鎮ㄥソ锛岄個璇锋偍濉啓鍑洪櫌瀹f暀璋冩煡琛紝璇风偣鍑�" + sendMagParam.getUrl() + "鏌ョ湅銆傛劅璋㈡偍閰嶅悎锛�");
                             } else if (active.equals("xh")) {
                                 sendMagParam.setContent("銆愭柊鍗庡尰闄€�戞偍濂斤紝閭�璇锋偍濉啓鍑洪櫌瀹f暀璋冩煡琛紝璇风偣鍑�" + sendMagParam.getUrl() + "鏌ョ湅銆傛劅璋㈡偍閰嶅悎锛�");
@@ -810,15 +814,22 @@
                         if (code.equals("0")) {
                             isSuccess = "true";
                         }
-                    } else if (active.equals("sltd")) {
+                    } else if (active.equals("sltd") || active.equals("nhfy")) {
                         log.info("sltd杩涙潵浜嗗悧锛焮}   ,---sendMagParam.getContent()鐨勫弬鏁颁负锛歿}", active, sendMagParam.getContent());
-                        //鐪佺珛鍚屽痉鐨勭煭淇″彂閫佹柟寮�
-                        String data = MessageSend.sendMsg(sendMagParam.getContent(), "6", sendMagParam.getPhone(), LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
-                        if (StringUtils.isNotEmpty(data)) {
-                            ObjectMapper mapper = new ObjectMapper();
-                            JsonNode root = mapper.readTree(data);
-                            String status = root.get("result").get(0).get("status").asText();
-                            if (status.equals("00000")) {
+                        if (active.equals("sltd")) {
+                            //鐪佺珛鍚屽痉鐨勭煭淇″彂閫佹柟寮�
+                            String data = MessageSend.sendMsg(sendMagParam.getContent(), "6", sendMagParam.getPhone(), LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
+                            if (StringUtils.isNotEmpty(data)) {
+                                ObjectMapper mapper = new ObjectMapper();
+                                JsonNode root = mapper.readTree(data);
+                                String status = root.get("result").get(0).get("status").asText();
+                                if (status.equals("00000")) {
+                                    isSuccess = "true";
+                                }
+                            }
+                        } else if (active.equals("nhfy")) {
+                            Map<String, Object> smsResult = mtSubmitSmUtil.submitSm(sendMagParam.getPhone(), sendMagParam.getContent());
+                            if (smsResult != null && smsResult.get("result") != null && smsResult.get("result").toString().equals("0")) {
                                 isSuccess = "true";
                             }
                         }
@@ -847,11 +858,11 @@
                     serviceSubtask.setSendstate(3L);
                     if (StringUtils.isNotEmpty(isSuccess) && isSuccess.equals("true")) {
                         serviceSubtask.setResult("success");
-                        serviceSubtask.setRemark(serviceSubtask.getRemark() + "," + "鐭俊鍙戦�佹垚鍔�");
+                        serviceSubtask.setRemark(StringUtils.isNotEmpty(serviceSubtask.getRemark()) ? serviceSubtask.getRemark() + ",鐭俊鍙戦�佹垚鍔�" : "鐭俊鍙戦�佹垚鍔�");
                         setSuccessPreachForm(serviceSubtask, sendPreachform, "鐭俊鍙戦�佹垚鍔�", "2");
                     } else {
                         serviceSubtask.setResult("error");
-                        serviceSubtask.setRemark(serviceSubtask.getRemark() + "," + "鐭俊鍙戦�佸け璐�" + now);
+                        serviceSubtask.setRemark(StringUtils.isNotEmpty(serviceSubtask.getRemark()) ? serviceSubtask.getRemark() + ",鐭俊鍙戦�佸け璐�" + now : "鐭俊鍙戦�佸け璐�" + now);
                         setSuccessPreachForm(serviceSubtask, sendPreachform, "鐭俊鍙戦�佸け璐�" + now, "5");
                     }
                 } catch (Exception e) {
@@ -923,7 +934,12 @@
                     Boolean wxCodeSuccess = false;
                     if (active.equals("hzszlyy")) {
                         if (!map.isEmpty() && map.get("success") != null) {
-                            wxCodeSuccess = (boolean) map.get("success");
+                            Integer wxCodeSuccessShiyi = (Integer) map.get("success");
+                            if (ObjectUtils.isNotEmpty(wxCodeSuccessShiyi) && wxCodeSuccessShiyi == 1) {
+                                wxCodeSuccess = true;
+                            } else {
+                                wxCodeSuccess = false;
+                            }
                         }
                     } else {
                         if (!map.isEmpty() && map.get("succ") != null) {
diff --git a/smartor/src/main/java/com/smartor/common/MtSubmitSmUtil.java b/smartor/src/main/java/com/smartor/common/MtSubmitSmUtil.java
new file mode 100644
index 0000000..f628f5e
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/common/MtSubmitSmUtil.java
@@ -0,0 +1,114 @@
+package com.smartor.common;
+
+import com.alibaba.fastjson2.JSON;
+import com.smartor.domain.MtSubmitSmResp;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+import java.nio.charset.StandardCharsets;
+import java.security.MessageDigest;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * MT娑堟伅鍙戦�佸伐鍏风被锛圫P鍚戣涓氭眹鑱氬钩鍙版彁浜T娑堟伅锛�
+ * 鎺ュ彛鍦板潃锛歨ttp://ip:port/submitsm
+ * 缂栫爜锛歎TF-8锛岄壌鏉冪畻娉曪細MD5
+ */
+@Slf4j
+@Component
+public class MtSubmitSmUtil {
+    private static final RestTemplate restTemplate = new RestTemplate();
+
+    @Value("${sms_password}")
+    private String password;
+
+    @Value("${sms_accountName}")
+    private String accountName;
+
+    @Value("${sms_url}")
+    private String url;
+
+    @Value("${sms_sourceAddr}")
+    private String sourceAddr;
+
+    @Value("${sms_serviceCode}")
+    private String serviceCode;
+
+    @Value("${sms_appkey}")
+    private String appKey;
+
+    @Value("${sms_flag}")
+    private String smsFlag;
+
+
+    /**
+     * 鍙戦�丮T娑堟伅
+     *
+     * @param destAddr 鐩爣鍙风爜
+     * @param content  鐭俊鍐呭
+     * @return MtSubmitSmResp 鍝嶅簲缁撴灉
+     */
+    public Map<String, Object> submitSm(String destAddr, String content) {
+        try {
+            log.info("鍗楀崕闄勪竴鍙戦�佺煭淇★紝destAddr锛歿}锛宑ontent锛歿}", destAddr, content);
+            String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
+            String hashHex = buildHashHex(accountName, password, date);
+
+            Map<String, Object> authMap = new HashMap<>();
+            authMap.put("Algorithm", "MD5");
+            authMap.put("Date", date);
+            authMap.put("HASHHEX", hashHex);
+
+            Map<String, Object> reqMap = new HashMap<>();
+            reqMap.put("accountName", accountName);
+            reqMap.put("Authorization", authMap);
+            reqMap.put("DestAddr", destAddr);
+            reqMap.put("SourceAddr", sourceAddr);
+            reqMap.put("Content", smsFlag + content);
+            reqMap.put("ServiceCode", serviceCode);
+
+            HttpHeaders headers = new HttpHeaders();
+            headers.setContentType(new MediaType("application", "json", StandardCharsets.UTF_8));
+            headers.set("Accept-Language", "UTF-8");
+            headers.set("app-key", "ak-BFq4NN0TMf92J7KAioNYGz74");
+
+            HttpEntity<String> entity = new HttpEntity<>(JSON.toJSONString(reqMap), headers);
+            log.info("MtSubmitSm 璇锋眰鍦板潃锛歿}锛岃姹傚弬鏁帮細{}", url + "/submitsm", JSON.toJSONString(reqMap));
+
+            ResponseEntity<String> response = restTemplate.postForEntity(url, entity, String.class);
+            log.info("MtSubmitSm 鍝嶅簲缁撴灉锛歿}", response.getBody());
+
+            return JSON.parseObject(response.getBody(), Map.class);
+        } catch (Exception e) {
+            log.error("MtSubmitSm 鍙戦�佸け璐ワ紝url锛歿}锛宒estAddr锛歿}锛宔rror锛歿}", url, destAddr, e.getMessage(), e);
+            Map<String, Object> resp = new HashMap<>();
+            resp.put("code", -1);
+            resp.put("message", "鍙戦�佸紓甯革細" + e.getMessage());
+            return resp;
+        }
+    }
+
+    /**
+     * 璁$畻HASHHEX锛歁D5(Algorithm:甯愬彿鍚�:瀵嗙爜:Date)
+     * 渚嬶細MD5:95555:12345:2016-10-09 16:19:43
+     */
+    private static String buildHashHex(String accountName, String password, String date) throws Exception {
+        String plain = "MD5:" + accountName + ":" + password + ":" + date;
+        MessageDigest md = MessageDigest.getInstance("MD5");
+        byte[] bytes = md.digest(plain.getBytes(StandardCharsets.UTF_8));
+        StringBuilder sb = new StringBuilder();
+        for (byte b : bytes) {
+            sb.append(String.format("%02x", b));
+        }
+        return sb.toString();
+    }
+}
diff --git a/smartor/src/main/java/com/smartor/domain/MtSubmitSmResp.java b/smartor/src/main/java/com/smartor/domain/MtSubmitSmResp.java
new file mode 100644
index 0000000..9e2a6b5
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/domain/MtSubmitSmResp.java
@@ -0,0 +1,38 @@
+package com.smartor.domain;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * MT娑堟伅鍙戦�佸搷搴斿弬鏁�
+ */
+@Data
+public class MtSubmitSmResp {
+
+
+    /**
+     * 涓嬪彂鐘舵�侊紝0 鎴愬姛锛屽叾浠栧け璐�
+     */
+    private Integer code;
+
+    /**
+     * 澶辫触鏃剁殑閿欒鎻愮ず
+     */
+    private String message;
+
+    /**
+     * 澶辫触鏃剁殑閿欒鎻愮ず
+     */
+    private String success;
+
+    /**
+     * 鍝嶅簲缁撴灉
+     */
+    private String result;
+
+    /**
+     * 涓嬪彂鐘舵��=0鏃舵湁鏁堬紝涓虹郴缁熶骇鐢熺殑msgid锛屽鍙戠敓浜嗛暱鐭俊鎷嗗垎锛屽垯杩斿洖澶氭潯msgid
+     */
+    private List<String> mtSubmitSm;
+}
diff --git a/smartor/src/main/java/com/smartor/domain/PatMedOuthosp.java b/smartor/src/main/java/com/smartor/domain/PatMedOuthosp.java
index c6f8874..067b229 100644
--- a/smartor/src/main/java/com/smartor/domain/PatMedOuthosp.java
+++ b/smartor/src/main/java/com/smartor/domain/PatMedOuthosp.java
@@ -33,7 +33,7 @@
     @ApiModelProperty(value = "闂ㄨ瘖缂栧彿")
     private String outhospno;
 
-    @ApiModelProperty(value = "闀挎湡浠诲姟闅忚鏍囪瘑锛�0涓嶉渶瑕侊紝1闇�瑕�")
+    @ApiModelProperty(value = "闀挎湡浠诲姟闅忚鏍囪瘑锛�0闇�瑕侊紝1涓嶉渶瑕�")
     private String fuflag;
 
     /**
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceStatisticsRequest.java b/smartor/src/main/java/com/smartor/domain/ServiceStatisticsRequest.java
index 3a079e1..880d3e2 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceStatisticsRequest.java
+++ b/smartor/src/main/java/com/smartor/domain/ServiceStatisticsRequest.java
@@ -28,7 +28,7 @@
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date endDate;
 
-    @ApiModelProperty(value = "缁熻缁村害锛歞ay-鎸夊ぉ, month-鎸夋湀, year-鎸夊勾", example = "day")
+    @ApiModelProperty(value = "缁熻缁村害锛歞ay-鎸夊ぉ, month-鎸夋湀, year-鎸夊勾(鏆傛椂娌℃湁)", example = "day")
     private String timeType = "day";
 
     @ApiModelProperty(value = "鏈烘瀯ID锛屼负绌哄垯鏌ヨ鎵�鏈�")
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceSubTaskAnswerReq.java b/smartor/src/main/java/com/smartor/domain/ServiceSubTaskAnswerReq.java
index 9ca7178..55f23b5 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceSubTaskAnswerReq.java
+++ b/smartor/src/main/java/com/smartor/domain/ServiceSubTaskAnswerReq.java
@@ -22,6 +22,9 @@
     @ApiModelProperty(value = "鎮h�匢D")
     private String param2;
 
+    @ApiModelProperty(value = "subID")
+    private String param6;
+
     @ApiModelProperty(value = "寮傚父鏍囪瘑")
     private String excep;
 
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceSubTaskMYDAnswerReq.java b/smartor/src/main/java/com/smartor/domain/ServiceSubTaskMYDAnswerReq.java
index 5d142b4..99e39ec 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceSubTaskMYDAnswerReq.java
+++ b/smartor/src/main/java/com/smartor/domain/ServiceSubTaskMYDAnswerReq.java
@@ -25,6 +25,9 @@
     @ApiModelProperty(value = "浠诲姟ID")
     private String taskId;
 
+    @ApiModelProperty(value = "subId")
+    private Long subId;
+
     @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 04180ce..c16c98e 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceSubtask.java
+++ b/smartor/src/main/java/com/smartor/domain/ServiceSubtask.java
@@ -162,6 +162,9 @@
     @ApiModelProperty(value = "鏈嶅姟绫诲瀷(1銆佺洃娴嬭瘎浼帮紱2銆佸嚭闄㈤殢璁匡紱3銆侀棬璇婇殢璁匡紱4銆佸鏁欏叧鎬�锛�5銆佸璇婄鐞嗭紱6銆佷綇闄㈡弧鎰忓害璋冩煡锛�7銆佹偅鑰呮姤鍛婏紱 8銆佸叾浠栭�氱煡 9浣撴闅忚 10.鍖绘妧闅忚  11锛屽奖鍍忎笓绉戦殢璁�  12銆佸績鐢典笓绉戦殢璁匡紝 13涓撶闅忚   14銆侀棬璇婃弧鎰忓害璋冩煡  15鎶曡瘔寤鸿  16璇鹃闅忚")
     private String serviceType;
 
+    @ApiModelProperty(value = "鏈嶅姟绫诲瀷闆嗗悎锛屾寜閫楀彿鍒嗗壊")
+    private String serviceTypes;
+
     /**
      * 妯℃澘ID
      */
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskCountReq.java b/smartor/src/main/java/com/smartor/domain/ServiceSubtaskCountReq.java
index 754cc2f..ce8c398 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskCountReq.java
+++ b/smartor/src/main/java/com/smartor/domain/ServiceSubtaskCountReq.java
@@ -51,7 +51,7 @@
     @ApiModelProperty(value = "瀛愪换鍔d闆嗗悎")
     private List<Long> subTaskIds;
 
-    @ApiModelProperty(value = "绉戝鐥呭尯")
+    @ApiModelProperty(value = "绉戝鐥呭尯锛�1锛岀梾鍖虹粺璁�  2锛岀瀹ょ粺璁�")
     private Integer statisticaltype;
 
     private String visitDeptCode;
diff --git a/smartor/src/main/java/com/smartor/domain/VO/ServiceSubtaskVO.java b/smartor/src/main/java/com/smartor/domain/VO/ServiceSubtaskVO.java
index ff75efc..ec9c95b 100644
--- a/smartor/src/main/java/com/smartor/domain/VO/ServiceSubtaskVO.java
+++ b/smartor/src/main/java/com/smartor/domain/VO/ServiceSubtaskVO.java
@@ -668,24 +668,28 @@
     /**
      * 寮�濮嬪嚭闄㈡棩鏈�
      */
+    @JsonFormat(pattern = "yyyy-MM-dd")
     @ApiModelProperty(value = "寮�濮嬪嚭闄㈡棩鏈�")
     private Date startOutHospTime;
 
     /**
      * 寮�濮嬪彂閫佹棩鏈�
      */
+    @JsonFormat(pattern = "yyyy-MM-dd")
     @ApiModelProperty(value = "寮�濮嬪彂閫佹棩鏈�")
     private Date startSendDateTime;
 
     /**
      * 缁撴潫鍙戦�佹棩鏈�
      */
+    @JsonFormat(pattern = "yyyy-MM-dd")
     @ApiModelProperty(value = "缁撴潫鍙戦�佹棩鏈�")
     private Date endSendDateTime;
 
     /**
      * 缁撴潫鍑洪櫌鏃ユ湡
      */
+    @JsonFormat(pattern = "yyyy-MM-dd")
     @ApiModelProperty(value = "缁撴潫鍑洪櫌鏃ユ湡")
     private Date endOutHospTime;
 
diff --git a/smartor/src/main/java/com/smartor/domain/entity/ServiceSubtaskEntity.java b/smartor/src/main/java/com/smartor/domain/entity/ServiceSubtaskEntity.java
index 0d63cca..bf85d05 100644
--- a/smartor/src/main/java/com/smartor/domain/entity/ServiceSubtaskEntity.java
+++ b/smartor/src/main/java/com/smartor/domain/entity/ServiceSubtaskEntity.java
@@ -667,24 +667,28 @@
     /**
      * 寮�濮嬪嚭闄㈡棩鏈�
      */
+    @JsonFormat(pattern = "yyyy-MM-dd")
     @ApiModelProperty(value = "寮�濮嬪嚭闄㈡棩鏈�")
     private Date startOutHospTime;
 
     /**
      * 寮�濮嬪彂閫佹棩鏈�
      */
+    @JsonFormat(pattern = "yyyy-MM-dd")
     @ApiModelProperty(value = "寮�濮嬪彂閫佹棩鏈�")
     private Date startSendDateTime;
 
     /**
      * 缁撴潫鍙戦�佹棩鏈�
      */
+    @JsonFormat(pattern = "yyyy-MM-dd")
     @ApiModelProperty(value = "缁撴潫鍙戦�佹棩鏈�")
     private Date endSendDateTime;
 
     /**
      * 缁撴潫鍑洪櫌鏃ユ湡
      */
+    @JsonFormat(pattern = "yyyy-MM-dd")
     @ApiModelProperty(value = "缁撴潫鍑洪櫌鏃ユ湡")
     private Date endOutHospTime;
 
diff --git a/smartor/src/main/java/com/smartor/mapper/SvyTaskTemplateMapper.java b/smartor/src/main/java/com/smartor/mapper/SvyTaskTemplateMapper.java
index ae37c52..24bdea2 100644
--- a/smartor/src/main/java/com/smartor/mapper/SvyTaskTemplateMapper.java
+++ b/smartor/src/main/java/com/smartor/mapper/SvyTaskTemplateMapper.java
@@ -19,7 +19,7 @@
      * @param svyid 浠诲姟闂嵎妯℃澘涓婚敭
      * @return 浠诲姟闂嵎妯℃澘
      */
-    public SvyTaskTemplate selectSvyTaskTemplateBySvyid(Long svyid);
+    public SvyTaskTemplate selectSvyTaskTemplateBySvyid(Long id);
 
     /**
      * 鏌ヨ浠诲姟闂嵎妯℃澘鍒楄〃
diff --git a/smartor/src/main/java/com/smartor/service/impl/PatArchiveServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/PatArchiveServiceImpl.java
index 6baf3e1..ad67157 100644
--- a/smartor/src/main/java/com/smartor/service/impl/PatArchiveServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/PatArchiveServiceImpl.java
@@ -30,6 +30,10 @@
 import java.io.FileOutputStream;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.Period;
+import java.time.ZoneId;
+import java.time.temporal.ChronoUnit;
 import java.util.*;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
@@ -650,11 +654,13 @@
 
         List<PatArchive> patArchiveList1 = DtoConversionUtils.sourceToTarget(patArchiveList, PatArchive.class);
         //缁欐偅鑰呰仈绯讳汉璧嬪��
-//        for (PatArchive pa : patArchives) {
         for (PatArchive pa : patArchiveList1) {
             PatArchivecontact patArchivecontact = new PatArchivecontact();
             patArchivecontact.setPatid(pa.getId());
             pa.setPatArchivecontactList(patArchivecontactMapper.selectPatArchivecontactList(patArchivecontact));
+            Map<String, String> map = calculateAge(pa.getBirthdate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate(), LocalDate.now());
+            pa.setAge(StringUtils.isNotEmpty(map.get("age")) ? Long.valueOf(map.get("age")) : null);
+            pa.setAgeUnit(map.get("ageUnit") != null ? map.get("ageUnit") : "");
         }
 
         return patArchiveList1;
@@ -831,6 +837,7 @@
      * @return
      */
 //    @Override
+
     /**
      * 鑾峰彇鎮h�呬俊鎭�绘暟锛堝幓閲嶏級
      *
@@ -854,7 +861,7 @@
         } else if (patArchiveReq.getAllhosp() != null && patArchiveReq.getAllhosp() == 2) {
             // 鏌ョ湅浣忛櫌  1  鏌ョ湅闂ㄨ瘖  2   鏌ョ湅浣撴  3 鏌ョ湅鍑洪櫌 4
 //            count = patArchiveMapper.countPatArchiveInfoByOuthospQC(patArchiveReq);
-            PatMedOuthospQueryReq req=new PatMedOuthospQueryReq();
+            PatMedOuthospQueryReq req = new PatMedOuthospQueryReq();
             String deptcodes = CollectionUtils.isEmpty(patArchiveReq.getLeaveldeptcodes()) ? null : String.join(",", patArchiveReq.getLeaveldeptcodes());
             String leavehospitaldistrictcodes = CollectionUtils.isEmpty(patArchiveReq.getLeavehospitaldistrictcodes()) ? null : String.join(",", patArchiveReq.getLeavehospitaldistrictcodes());
             req.setDeptcode(deptcodes);
@@ -882,7 +889,7 @@
         List<PatArchiveOthreInfo> patArchiveList = new ArrayList<>();
 
         //闂ㄦ�ヨ瘖淇℃伅锛岄噰鐢ㄥ垎琛ㄦ煡璇紙鍏堟煡闂ㄦ�ヨ瘖鐨勫瓨鍌ㄨ繃绋嬶紝鍐嶆煡鎮h�呭熀鏈俊鎭〃锛屽叧鑱旀潯浠讹細patid锛�
-        PatMedOuthospQueryReq req=new PatMedOuthospQueryReq();
+        PatMedOuthospQueryReq req = new PatMedOuthospQueryReq();
         String deptcodes = CollectionUtils.isEmpty(patArchiveReq.getLeaveldeptcodes()) ? null : String.join(",", patArchiveReq.getLeaveldeptcodes());
         String leavehospitaldistrictcodes = CollectionUtils.isEmpty(patArchiveReq.getLeavehospitaldistrictcodes()) ? null : String.join(",", patArchiveReq.getLeavehospitaldistrictcodes());
         req.setDeptcode(deptcodes);
@@ -891,10 +898,10 @@
         req.setDrname(StringUtils.isNotEmpty(patArchiveReq.getDrname()) ? patArchiveReq.getDrname() : null);
         req.setPatname(StringUtils.isNotEmpty(patArchiveReq.getName()) ? patArchiveReq.getName() : null);
         req.setDiagname(StringUtils.isNotEmpty(patArchiveReq.getLeavediagname()) ? patArchiveReq.getLeavediagname() : null);
-        req.setPageNum(patArchiveReq.getPageNum()==null?null:patArchiveReq.getPageNum());
-        req.setPageSize(patArchiveReq.getPageSize()==null?null:patArchiveReq.getPageSize());
+        req.setPageNum(patArchiveReq.getPageNum() == null ? null : patArchiveReq.getPageNum());
+        req.setPageSize(patArchiveReq.getPageSize() == null ? null : patArchiveReq.getPageSize());
         List<PatMedOuthosp> patMedOuthosps = patMedOuthospMapper.callSpQueryOuthosp(req);
-        for (PatMedOuthosp patMedOuthosp:patMedOuthosps ) {
+        for (PatMedOuthosp patMedOuthosp : patMedOuthosps) {
             PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedOuthosp.getPatid());
             PatArchiveOthreInfo patArchiveOthreInfo = DtoConversionUtils.sourceToTarget(patArchive, PatArchiveOthreInfo.class);
             patArchiveOthreInfo.setDeptcode(patMedOuthosp.getDeptcode());
@@ -905,5 +912,57 @@
         }
         return patArchiveList;
     }
+
+    public Map<String, String> calculateAge(LocalDate birthdate, LocalDate today) {
+        if (birthdate == null || today.isBefore(birthdate)) {
+            return null;
+        }
+        Map<String, String> ageMap = new HashMap<>();
+
+        Period period = Period.between(birthdate, today);
+        long totalDays = ChronoUnit.DAYS.between(birthdate, today);
+        long totalMonths = ChronoUnit.MONTHS.between(birthdate, today);
+
+        int years = period.getYears();
+        int months = period.getMonths();
+        int days = period.getDays();
+
+        String ageUnit;
+        Integer age;
+        String ageUnit2 = null;
+        Integer age2 = null;
+
+        if (totalDays < 90) {
+            // 灏忎簬 1 涓湀锛屾寜澶╄绠�
+            ageUnit = "澶�";
+            age = (int) totalDays;
+            ageMap.put("age", age != null ? age.toString() : null);
+            ageMap.put("ageUnit", ageUnit);
+            ageMap.put("age2", null);
+            ageMap.put("ageUnit2", null);
+        } else if (totalMonths < 36) {
+            // 灏忎簬 1 骞达紝鎸夋湀 + 澶╄绠�
+            ageUnit = "鏈�";
+            age = (int) totalMonths;
+            ageUnit2 = "澶�";
+            age2 = days;
+            ageMap.put("age", age != null ? age.toString() : null);
+            ageMap.put("ageUnit", ageUnit);
+            ageMap.put("age2", age2 != null ? age2.toString() : null);
+            ageMap.put("ageUnit2", ageUnit2);
+        } else {
+            // 澶т簬 1 骞达紝鎸夊勾 + 鏈堣绠�
+            ageUnit = "宀�";
+            age = years;
+            ageUnit2 = "鏈�";
+            age2 = months;
+            ageMap.put("age", age != null ? age.toString() : null);
+            ageMap.put("ageUnit", ageUnit);
+            ageMap.put("age2", age2 != null ? age2.toString() : null);
+            ageMap.put("ageUnit2", ageUnit2);
+        }
+
+        return ageMap;
+    }
 }
 
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 45fca1c..d3c7238 100644
--- a/smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
@@ -1295,18 +1295,15 @@
                                 //濡傛灉褰撳墠寰幆鐨勫瓙浠诲姟鐨勫嚭闄㈡椂闂村湪鈥滃噯澶囨柊澧炵殑瀛愪换鍔♀�濈殑鍑洪櫌鏃堕棿涔嬪墠锛屽垯灏嗗惊鐜殑瀛愪换鍔″仠鎺�
 //                            log.error("鎮h�呭啀鍏ラ櫌鐨剆erviceSubtask1涓�:{}", serviceSubtask1);
                                 serviceSubtask1.setSendstate(4L);
+                                serviceSubtask1.setIsVisitAgain(2);
                                 serviceSubtask1.setRemark("鎮h�呭啀鍏ラ櫌");
                                 serviceSubtask1.setResult("error");
-//                            serviceSubtask1.setFinishtime(new Date());
                                 serviceSubtaskMapper.updateServiceSubtask(serviceSubtask1);
                             }
                         }
 
                     }
                 }
-                //灏嗘偅鍏ョ殑鍏ラ櫌鏁版嵁璁剧疆涓哄凡澶勭悊
-                //鏇存柊鐘舵�佸�� patMedInhosp1.setDeptcheckFlag("0");
-                //patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
             } catch (Exception e) {
                 log.error("鍏ラ櫌鏁版嵁淇℃伅鍑哄紓甯镐簡锛歿},{}", patMedInhosp1, e.getMessage());
             }
diff --git a/smartor/src/main/java/com/smartor/service/impl/PatMedOuthospServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/PatMedOuthospServiceImpl.java
index 73c1cca..b0e83b2 100644
--- a/smartor/src/main/java/com/smartor/service/impl/PatMedOuthospServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/PatMedOuthospServiceImpl.java
@@ -304,7 +304,7 @@
         PatMedOuthospQueryReq req = new PatMedOuthospQueryReq();
         String deptcodes = CollectionUtils.isEmpty(patMedReq.getDeptcodeList()) ? null : String.join(",", patMedReq.getDeptcodeList());
         req.setBeginAdmitdate(patMedReq.getStartDate());
-        req.setEndAdmitdate(patMedReq.getEndDate());
+        req.setEndAdmitdate(DateUtils.addDays(patMedReq.getEndDate(),1));
         req.setDeptcode(deptcodes);
         req.setOrgid(patMedReq.getOrgid());
 //        req.setCampusid(patMedReq.getCampusid());
@@ -334,6 +334,7 @@
     public Integer dealOutpatientInfo() {
         PatMedOuthosp patMedOuthosp = new PatMedOuthosp();
         patMedOuthosp.setDiagcheckFlag("0");
+        patMedOuthosp.setFuflag("1");
         List<PatMedOuthosp> patMedOuthosps = selectPatMedOuthospList(patMedOuthosp);
         for (PatMedOuthosp patMedOuthosp1 : patMedOuthosps) {
             PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedOuthosp1.getPatid());
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java
index 9cd0b25..aab600e 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java
@@ -154,7 +154,7 @@
         sysUser.setCampusid("1");
         //鏍规嵁userName鍒ゆ柇涓�涓嬶紝鏄笉鏄箣鍓嶆湁鏂板
         SysUser sysUser1 = null;
-        if(StringUtils.isEmpty(sysUser.getUserName()) || StringUtils.isEmpty(sysUser.getOrgid())){
+        if (StringUtils.isEmpty(sysUser.getUserName()) || StringUtils.isEmpty(sysUser.getOrgid())) {
             return false;
         }
         List<SysUser> sysUserList = sysUserMapper.selectUserList(sysUser);
@@ -553,9 +553,9 @@
         if (CollectionUtils.isNotEmpty(epli)) externalInHospPatientLiaisonInfo = epli2.get(0);
         List<HashMap<String, Object>> bingRenKZXXList = ObjectUtils.isNotEmpty(yeWuXX) ? (List<HashMap<String, Object>>) yeWuXX.get("BingRenKZXXList") : null;
         if (CollectionUtils.isNotEmpty(bingRenKZXXList)) {
-            for(HashMap<String, Object> bingRenKZXX : bingRenKZXXList){
+            for (HashMap<String, Object> bingRenKZXX : bingRenKZXXList) {
                 String XiangMuDM = ObjectUtils.isNotEmpty(bingRenKZXX.get("XiangMuDM")) ? bingRenKZXX.get("XiangMuDM").toString() : null;
-                if(StringUtils.isNotEmpty(XiangMuDM) && XiangMuDM.equals("DuanHaoXX")){
+                if (StringUtils.isNotEmpty(XiangMuDM) && XiangMuDM.equals("DuanHaoXX")) {
                     externalInHospPatientInfo.setDuanHaoXX(ObjectUtils.isNotEmpty(bingRenKZXX.get("XiangMuZMC")) ? bingRenKZXX.get("XiangMuZMC").toString() : null);
                     break;
                 }
@@ -610,7 +610,7 @@
         patMedInhosp1.setDeptcode(externalInHospPatientInfo.getDangQianKSID());
 
         if (ObjectUtils.isNotEmpty(SuiFangJH)) {
-            patMedInhosp1.setFuflag(ObjectUtils.isNotEmpty(SuiFangJH.get("SuiFangBS")) ? SuiFangJH.get("SuiFangBS").toString() : null);
+            patMedInhosp1.setFuflag(ObjectUtils.isNotEmpty(SuiFangJH.get("SuiFangBS")) ? SuiFangJH.get("SuiFangBS").toString() : "1");
             if (ObjectUtils.isNotEmpty(SuiFangJH.get("SuiFangRQ"))) {
                 try {
                     SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@@ -644,9 +644,10 @@
         patMedInhosp1.setInhospstate("1");
         if (deathFlag) {
             //鐥呬汉姝讳骸鏃犻』闅忚
-            patMedInhosp1.setFuflag("1");
+            patMedInhosp1.setFuflag("0");
             //鏇存柊鐥呬汉 notrequiredFlag
             patArchive.setNotrequiredFlag("1");
+            patArchive.setNotrequiredreason("鎮h�呭凡绂讳笘");
             patArchiveMapper.updatePatArchive(patArchive);
             //瀵瑰凡缁忕敓鎴愮殑闅忚浠诲姟杩涜澶勭悊
             ServiceSubtaskEntity serviceSubtaskVO = new ServiceSubtaskEntity();
@@ -654,8 +655,8 @@
             serviceSubtaskVO.setSendstate(2L);
             List<ServiceSubtask> serviceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO);
             for (ServiceSubtask serviceSubtask : serviceSubtaskList) {
-                serviceSubtask.setSendstate(6L);
-                serviceSubtask.setRemark(serviceSubtask.getRemark() + ";鐥呬汉宸叉浜★紝涓嶉殢璁�");
+                serviceSubtask.setSendstate(4L);
+                serviceSubtask.setRemark(serviceSubtask.getRemark() + ";鎮h�呭凡绂讳笘锛屼笉闅忚");
                 serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
             }
         }
@@ -666,7 +667,7 @@
             patMedInhosp1.setCampusid("1");
             if (CollectionUtils.isNotEmpty(noLongTask) && noLongTask.contains(patMedInhosp1.getOrgid())) {
                 //涓嶉渶瑕侀暱鏈熶换鍔¢殢璁�
-                patMedInhosp1.setFuflag("1");
+                patMedInhosp1.setFuflag("0");
             }
             int i = patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
             if (i != 1) return false;
@@ -689,7 +690,7 @@
             patMedInhosp1.setCreateTime(new Date());
             if (CollectionUtils.isNotEmpty(noLongTask) && noLongTask.contains(patMedInhosp1.getOrgid())) {
                 //涓嶉渶瑕侀暱鏈熶换鍔¢殢璁�
-                patMedInhosp1.setFuflag("1");
+                patMedInhosp1.setFuflag("0");
             }
 
             int i = patMedInhospMapper.insertPatMedInhosp(patMedInhosp1);
@@ -768,7 +769,7 @@
         patMedInhosp1.setDeptcode(externalInHospPatientInfo.getDangQianKSID());
 
         if (ObjectUtils.isNotEmpty(SuiFangJH)) {
-            patMedInhosp1.setFuflag(ObjectUtils.isNotEmpty(SuiFangJH.get("SuiFangBS")) ? SuiFangJH.get("SuiFangBS").toString() : null);
+            patMedInhosp1.setFuflag(ObjectUtils.isNotEmpty(SuiFangJH.get("SuiFangBS")) ? SuiFangJH.get("SuiFangBS").toString() : "1");
             if (ObjectUtils.isNotEmpty(SuiFangJH.get("SuiFangRQ"))) {
                 try {
                     SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@@ -811,7 +812,7 @@
             patMedInhosp1.setOrgid(ObjectUtils.isNotEmpty(BingRenXX) && ObjectUtils.isNotEmpty(BingRenXX.get("ZuZhiJGID")) ? BingRenXX.get("ZuZhiJGID").toString() : null);
             if (CollectionUtils.isNotEmpty(noLongTask) && noLongTask.contains(patMedInhosp1.getOrgid())) {
                 //涓嶉渶瑕侀暱鏈熶换鍔¢殢璁�
-                patMedInhosp1.setFuflag("1");
+                patMedInhosp1.setFuflag("0");
             }
             int i = patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
             if (i != 1) return false;
@@ -834,7 +835,7 @@
             patMedInhosp1.setCreateTime(new Date());
             if (CollectionUtils.isNotEmpty(noLongTask) && noLongTask.contains(patMedInhosp1.getOrgid())) {
                 //涓嶉渶瑕侀暱鏈熶换鍔¢殢璁�
-                patMedInhosp1.setFuflag("1");
+                patMedInhosp1.setFuflag("0");
             }
             int i = patMedInhospMapper.insertPatMedInhosp(patMedInhosp1);
             if (i != 1) return false;
@@ -984,7 +985,7 @@
         patMedInhosp1.setDeptcode(externalInHospPatientInfo.getDangQianKSID());
 
         if (ObjectUtils.isNotEmpty(SuiFangJH)) {
-            patMedInhosp1.setFuflag(ObjectUtils.isNotEmpty(SuiFangJH.get("SuiFangBS")) ? SuiFangJH.get("SuiFangBS").toString() : null);
+            patMedInhosp1.setFuflag(ObjectUtils.isNotEmpty(SuiFangJH.get("SuiFangBS")) ? SuiFangJH.get("SuiFangBS").toString() : "1");
             if (ObjectUtils.isNotEmpty(SuiFangJH.get("SuiFangRQ"))) {
                 try {
                     SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@@ -1174,7 +1175,7 @@
                 patMedOuthosp.setDrcode(externalDiagnosisInfo.getZhenDuanYSID());
                 patMedOuthosp.setDrname(externalDiagnosisInfo.getZhenDuanYSXM());
                 patMedOuthosp.setIcd10code(externalDiagnosisInfo.getIcd10());
-                patMedOuthosp.setFuflag("0");
+                patMedOuthosp.setFuflag("1");
             }
         }
         for (ExternalWZInfo externalWZInfo : ExternalWZInfoList) {
@@ -1191,7 +1192,7 @@
             patMedOuthosp.setUpdateTime(new Date());
             if (CollectionUtils.isNotEmpty(noLongTask) && noLongTask.contains(patMedOuthosp.getOrgid())) {
                 //涓嶉渶瑕侀暱鏈熶换鍔¢殢璁匡紝鐢卞尰鐢熻嚜宸卞幓闅忚锛堜附姘翠腑鍖婚櫌棣栨鎻愬嚭锛�
-                patMedOuthosp.setFuflag("1");
+                patMedOuthosp.setFuflag("0");
             }
             i = patMedOuthospService.updatePatMedOuthosp(patMedOuthosp);
         } else {
@@ -1199,7 +1200,7 @@
             patMedOuthosp.setUpdateTime(new Date());
             if (CollectionUtils.isNotEmpty(noLongTask) && noLongTask.contains(patMedOuthosp.getOrgid())) {
                 //涓嶉渶瑕侀暱鏈熶换鍔¢殢璁�
-                patMedOuthosp.setFuflag("1");
+                patMedOuthosp.setFuflag("0");
             }
             i = patMedOuthospService.insertPatMedOuthosp(patMedOuthosp);
 
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 55b34de..fa6a9d7 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java
@@ -40,7 +40,6 @@
 public class ServiceSLTDHealthcareRecordServiceImpl implements IServiceSLTDHealthcareRecordService {
 
     private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
-    public static final String APP_KEY = "ak-zUMiOWhqXiJQWPB1pCbz0pjr";
 
     @Autowired
     private IPatArchiveService patArchiveService;
@@ -71,6 +70,9 @@
 
     @Value("${userPwd}")
     private String userPwd;
+
+    @Value("${lwl_app_key}")
+    private String APP_KEY;
 
     @Override
     public List<ServiceSLTDInhospResDTO> queryHealthcareRecordList(ServiceSLTDInhospReqVO reqVO) {
@@ -290,19 +292,19 @@
                     sysUserDept.setCreateTime(new Date());
                     sysUserDept.setDelFlag(0L);
 
-                    //鍒ゆ柇涓�涓嬫槸涓嶆槸宸茬粡瀛樺湪浜�
-                    if (ObjectUtils.isNotEmpty(sysUser1) && ObjectUtils.isNotEmpty(sysDept)) {
+                    //鍒ゆ柇涓�涓嬬敤鎴�-閮ㄩ棬鍏崇郴鏄笉鏄凡缁忓瓨鍦ㄤ簡锛堟棤璁烘柊鐢ㄦ埛杩樻槸鑰佺敤鎴烽兘闇�瑕佸幓閲嶏級
+                    if (ObjectUtils.isNotEmpty(sysUser.getUserId()) && ObjectUtils.isNotEmpty(sysDept)) {
                         SysUserDept sud = new SysUserDept();
-                        sud.setUserId(sysUser1.getUserId());
+                        sud.setUserId(sysUser.getUserId());
                         sud.setDeptId(sysDept.getDeptId());
+                        sud.setOrgid(sysDept.getOrgid());
                         List<SysUserDept> sysUserDepts = sysUserDeptMapper.selectSysUserDeptList(sud);
                         if (CollectionUtils.isNotEmpty(sysUserDepts)) {
                             sysUserDept.setId(sysUserDepts.get(0).getId());
                             sysUserDeptMapper.updateSysUserDept(sysUserDept);
+                        } else {
+                            sysUserDeptMapper.insertSysUserDept(sysUserDept);
                         }
-                    } else {
-                        //涓嶅瓨鍦紝鍒欐柊澧�
-                        sysUserDeptMapper.insertSysUserDept(sysUserDept);
                     }
                     if (StringUtils.isNotEmpty(sysDept.getDeptType()) && sysDept.getDeptType().equals("1")) {
                         hospInfoList.add(Arrays.asList(sysDept.getDeptCode()));
@@ -325,7 +327,7 @@
             sur.setOrgid(sysUser.getOrgid());
 
             //鍏堟煡璇竴涓嬶紝鏄惁瀛樺湪
-            SysUserRole sysUserRole = sysUserRoleMapper.selectUserRoleByRoleIdAndUserId(sysUser.getUserId(), 3L);
+            SysUserRole sysUserRole = sysUserRoleMapper.selectUserRoleByRoleIdAndUserId(3L, sysUser.getUserId());
             if (ObjectUtils.isNotEmpty(sysUserRole)) continue;
 
             userRoleList.add(sur);
@@ -551,6 +553,9 @@
         patMedOuthosp.setCreateTime(new Date());
         patMedOuthosp.setOrgid(dto.getOrgId());
         patMedOuthosp.setCampusid(dto.getCampusId());
+        patMedOuthosp.setFuflag("1");
+        if (StringUtils.isNotEmpty(patArchive.getNotrequiredFlag()) && patArchive.getNotrequiredFlag().equals("1"))
+            patMedOuthosp.setFuflag("0");
         return patMedOuthosp;
     }
 
@@ -704,6 +709,8 @@
         patMedInhosp.setNurseName(dto.getChiefNurseName());
         patMedInhosp.setSerialnum(dto.getHealthcareRecordNo());
         patMedInhosp.setFuflag("1");
+        if (StringUtils.isNotEmpty(patArchive.getNotrequiredFlag()) && patArchive.getNotrequiredFlag().equals("1"))
+            patMedInhosp.setFuflag("0");
         if ("0".equals(cry)) patMedInhosp.setInhospstate("0");
         if ("1".equals(cry)) patMedInhosp.setInhospstate("1");
         if ("3".equals(cry)) patMedInhosp.setInhospstate("3");
@@ -751,9 +758,20 @@
     }
 
     private PatArchive processPatientArchive(ServiceSLTDInhospResDTO dto) {
-        PatArchive queryArchive = new PatArchive();
-        queryArchive.setIdcardno(StringUtils.isEmpty(dto.getIdCardNo()) ? "" + dto.getMedicalCardId() : dto.getIdCardNo().trim());
-        List<PatArchive> existingArchives = patArchiveService.selectPatArchiveList(queryArchive);
+        List<PatArchive> existingArchives = null;
+
+        // 浼樺厛鎸� patientno 绮剧‘鏌ラ噸锛屾煡涓嶅埌鍐嶆寜 idcardno 鏌ラ噸锛圓ND鏉′欢浼氭紡鏌ュ悓涓�浜轰笉鍚宲atientno鐨勬儏鍐碉級
+        if (dto.getPatientId() != null) {
+            PatArchive queryByPatientNo = new PatArchive();
+            queryByPatientNo.setPatientno(String.valueOf(dto.getPatientId()));
+            queryByPatientNo.setIdcardno(StringUtils.isNotEmpty(dto.getIdCardNo()) ? dto.getIdCardNo().trim() : null);
+            existingArchives = patArchiveService.selectPatArchiveList(queryByPatientNo);
+        }
+//        if (CollectionUtils.isEmpty(existingArchives) && !StringUtils.isEmpty(dto.getIdCardNo())) {
+//            PatArchive queryByIdCard = new PatArchive();
+//            queryByIdCard.setIdcardno(dto.getIdCardNo().trim());
+//            existingArchives = patArchiveService.selectPatArchiveList(queryByIdCard);
+//        }
 
         PatArchive patArchive = buildPatientArchive(dto);
 
@@ -762,6 +780,8 @@
             log.debug("銆恜rocessPatientArchive銆戞柊澧炴偅鑰呮。妗堬紝鎮h�呯紪鍙凤細{}", patArchive.getPatientno());
         } else {
             patArchive.setId(existingArchives.get(0).getId());
+            patArchive.setNotrequiredFlag(existingArchives.get(0).getNotrequiredFlag());
+            patArchive.setNotrequiredreason(existingArchives.get(0).getNotrequiredreason());
             patArchiveService.updateArchive(patArchive);
             log.debug("銆恜rocessPatientArchive銆戞洿鏂版偅鑰呮。妗堬紝鎮h�呯紪鍙凤細{}", patArchive.getPatientno());
         }
@@ -771,7 +791,7 @@
 
     private PatArchive buildPatientArchive(ServiceSLTDInhospResDTO dto) {
         PatArchive patArchive = new PatArchive();
-        patArchive.setPatientno("" + dto.getPatientId());
+        patArchive.setPatientno(dto.getPatientId() == null ? null : String.valueOf(dto.getPatientId()));
         patArchive.setIdcardno(StringUtils.isEmpty(dto.getIdCardNo()) ? "" + dto.getMedicalCardId() : dto.getIdCardNo().trim());
         patArchive.setName(dto.getPatientName());
         patArchive.setSourcefrom(2L);
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java
index 8b43b97..dc0931c 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java
@@ -14,9 +14,7 @@
 import com.smartor.domain.VO.ServiceSubtaskDetailTraceVO;
 import com.smartor.domain.entity.ServiceSubtaskEntity;
 import com.smartor.mapper.*;
-import com.smartor.service.IServiceSubtaskAnswerService;
-import com.smartor.service.IServiceSubtaskDetailTraceService;
-import com.smartor.service.IServiceTaskService;
+import com.smartor.service.*;
 import com.sun.org.apache.bcel.internal.generic.NEW;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
@@ -75,6 +73,18 @@
 
     @Autowired
     private IServiceSubtaskDetailTraceService traceService;
+
+    @Autowired
+    private ISvyTaskTemplateService svyTaskTemplateService;
+
+    @Autowired
+    private ISvyLibTemplateScriptService svyLibTemplateScriptService;
+
+    @Autowired
+    private IIvrTaskTemplateService ivrTaskTemplateService;
+
+    @Autowired
+    private IIvrLibaTemplateScriptService ivrLibaTemplateScriptService;
 
     @Value("${pri_key}")
     private String pri_key;
@@ -154,6 +164,7 @@
     public Integer saveQuestionAnswer(ServiceSubTaskAnswerReq serviceSubTaskAnswerReq, Long flag) {
         Long tid = null;
         Long pid = null;
+        Long subid = null;
         Double score = null;
         Long isabno = 0L;
         Set<String> allKeys = redisCache.getAllKeys();
@@ -164,16 +175,19 @@
             if (flag == 0) {
                 tid = Long.valueOf(rsaPublicKeyExample.decryptedData(serviceSubTaskAnswerReq.getParam1(), pri_key));
                 pid = Long.valueOf(rsaPublicKeyExample.decryptedData(serviceSubTaskAnswerReq.getParam2(), pri_key));
+                if (StringUtils.isNotEmpty(serviceSubTaskAnswerReq.getParam6()))
+                    subid = Long.valueOf(rsaPublicKeyExample.decryptedData(serviceSubTaskAnswerReq.getParam6(), pri_key));
             } else if (flag == 1) {
                 tid = Long.valueOf(serviceSubTaskAnswerReq.getParam1());
                 pid = Long.valueOf(serviceSubTaskAnswerReq.getParam2());
+                subid = Long.valueOf(serviceSubTaskAnswerReq.getParam6());
             }
             if (serviceSubTaskAnswerReq.getType() != null && serviceSubTaskAnswerReq.getType() == 2) {
                 allKeys = new HashSet<>();
-                allKeys.add(pid + "-" + tid + "-WJscriptCache");
+                allKeys.add(pid + "-" + tid + "-" + subid + "-WJscriptCache");
             } else if (serviceSubTaskAnswerReq.getType() != null && serviceSubTaskAnswerReq.getType() == 1) {
                 allKeys = new HashSet<>();
-                allKeys.add(pid + "-" + tid + "-SFscriptCache");
+                allKeys.add(pid + "-" + tid + "-" + subid + "-SFscriptCache");
             }
         }
 
@@ -183,7 +197,7 @@
             String[] split = key.split("-");
             //鍏堝垽鏂紝鏄笉鏄綋鍓嶆彁浜や汉鐨勶紝涓嶆槸褰撳墠鎻愪氦浜虹殑锛岃烦杩�
             try {
-                if (ObjectUtils.isNotEmpty(split[0]) && ObjectUtils.isNotEmpty(split[1]) && !Long.valueOf(split[0]).equals(pid) && !Long.valueOf(split[1]).equals(tid)) {
+                if (ObjectUtils.isNotEmpty(split[0]) && ObjectUtils.isNotEmpty(split[1]) && !Long.valueOf(split[0]).equals(pid) && !Long.valueOf(split[1]).equals(tid) && !Long.valueOf(split[2]).equals(subid)) {
                     continue;
                 }
             } catch (Exception e) {
@@ -202,7 +216,7 @@
                                 //璇存槑鏄涓�棰�
                                 List<SvyTaskTemplateTargetoption> svyTaskTemplateTargetoptions = cacheList.get(0).getSvyTaskTemplateTargetoptions();
                                 svyTaskTemplateScriptVO.setSvyTaskTemplateTargetoptions(svyTaskTemplateTargetoptions);
-                                Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, tid, pid, null);
+                                Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, tid, pid, subid);
                                 if (map == null) continue aa;
                                 if (!Objects.isNull(map.get("nextScriptNo")))
                                     nextScriptno = Long.valueOf(map.get("nextScriptNo"));
@@ -224,7 +238,7 @@
 
                         if (svyTaskTemplateScriptVO.getSort() != null && svyTaskTemplateScriptVO.getSort().equals(nextScriptno)) {
 //                            log.error("svyTaskTemplateScriptVO鐨勫�间负锛歿}", svyTaskTemplateScriptVO);
-                            Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, Long.valueOf(split[1]), Long.valueOf(split[0]), null);
+                            Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, Long.valueOf(split[1]), Long.valueOf(split[0]), Long.valueOf(split[2]));
                             log.error("nextScriptNo鐨勪俊鎭负锛歿}", map.get("nextScriptNo"));
                             if (!Objects.isNull(map.get("nextScriptNo")))
                                 nextScriptno = Long.valueOf(map.get("nextScriptNo"));
@@ -250,7 +264,7 @@
                                 List<IvrTaskTemplateTargetoption> ivrTaskTemplateTargetoptions = cacheList.get(0).getIvrTaskScriptTargetoptionList();
 //                                List<IvrTaskTemplateTargetoption> ivrTaskTemplateTargetoptions = DtoConversionUtils.sourceToTarget(ivrLibaTemplateTargetoptions, IvrTaskTemplateTargetoption.class);
                                 ivrTaskTemplateScriptVO.setIvrTaskScriptTargetoptionList(ivrTaskTemplateTargetoptions);
-                                Map<String, String> map = setSFInfo(ivrTaskTemplateScriptVO, tid, pid, null);
+                                Map<String, String> map = setSFInfo(ivrTaskTemplateScriptVO, tid, pid, subid);
                                 if (!Objects.isNull(map.get("nextScriptNo")))
                                     nextScriptno = Long.valueOf(map.get("nextScriptNo"));
                                 if (score == null) {
@@ -267,7 +281,7 @@
                         ivrTaskTemplateScriptVO.setIvrTaskScriptTargetoptionList(ivrTaskTemplateTargetoptions);
 
                         if (ivrTaskTemplateScriptVO.getSort() != null && Long.valueOf(ivrTaskTemplateScriptVO.getSort()).equals(nextScriptno)) {
-                            Map<String, String> map = setSFInfo(ivrTaskTemplateScriptVO, Long.valueOf(split[1]), Long.valueOf(split[0]), null);
+                            Map<String, String> map = setSFInfo(ivrTaskTemplateScriptVO, Long.valueOf(split[1]), Long.valueOf(split[0]), Long.valueOf(split[2]));
                             log.error("----nextScriptNo2鐨勪俊鎭负锛歿}", map.get("nextScriptNo"));
                             if (!Objects.isNull(map.get("nextScriptNo")))
                                 nextScriptno = Long.valueOf(map.get("nextScriptNo"));
@@ -377,9 +391,7 @@
                 }
             } else if (serviceSubTaskCacheReq.getType() == 1) {
                 List<IvrTaskTemplateScriptVO> cacheList = serviceSubTaskCacheReq.getIvrTaskTemplateScriptVOList();
-                cacheList.sort(Comparator.comparingLong(
-                        vo -> Optional.ofNullable(vo.getSort()).orElse(0)
-                ));
+                cacheList.sort(Comparator.comparingLong(vo -> Optional.ofNullable(vo.getSort()).orElse(0)));
                 log.error("鐢佃瘽闅忚闂嵎鍥炵瓟缁撴灉锛歿}", cacheList.size());
                 for (int i = 0; i < cacheList.size(); i++) {
                     if (i == 0) {
@@ -507,7 +519,7 @@
                             List<SvyTaskTemplateTargetoption> svyTaskTemplateTargetoptions = svyTaskTemplateScriptVOS.get(0).getSvyTaskTemplateTargetoptions();
 //                            List<SvyTaskTemplateTargetoption> svyTaskTemplateTargetoptions = DtoConversionUtils.sourceToTarget(svyTaskTemplateTargetoptions, SvyTaskTemplateTargetoption.class);
                             svyTaskTemplateScriptVO.setSvyTaskTemplateTargetoptions(svyTaskTemplateTargetoptions);
-                            Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, Long.valueOf(serviceSubTaskMYDAnswerReq.getTaskId()), patid, null);
+                            Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, Long.valueOf(serviceSubTaskMYDAnswerReq.getTaskId()), patid, serviceSubTaskMYDAnswerReq.getSubId());
                             if (map == null) continue;
                             if (!Objects.isNull(map.get("nextScriptNo")))
                                 nextScriptno = Long.valueOf(map.get("nextScriptNo"));
@@ -531,7 +543,7 @@
 
                     if (svyTaskTemplateScriptVO.getSort() != null && svyTaskTemplateScriptVO.getSort().equals(nextScriptno)) {
                         log.error("svyTaskTemplateScriptVO鐨勫�间负锛歿}", svyTaskTemplateScriptVO);
-                        Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, Long.valueOf(serviceSubTaskMYDAnswerReq.getTaskId()), patid, null);
+                        Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, Long.valueOf(serviceSubTaskMYDAnswerReq.getTaskId()), patid, serviceSubTaskMYDAnswerReq.getSubId());
                         log.error("map鐨勪俊鎭负锛歿}", map);
                         if (!Objects.isNull(map.get("nextScriptNo")))
                             nextScriptno = Long.valueOf(map.get("nextScriptNo"));
@@ -640,28 +652,33 @@
             RSAPublicKeyExample rsaPublicKeyExample = new RSAPublicKeyExample();
             Long tid = null;
             Long pid = null;
+            Long subid = null;
             if (flag == 0L) {
                 tid = Long.valueOf(rsaPublicKeyExample.decryptedData(serviceSubTaskCacheReq.getParam1(), pri_key));
                 pid = Long.valueOf(rsaPublicKeyExample.decryptedData(serviceSubTaskCacheReq.getParam2(), pri_key));
+                if (StringUtils.isNotEmpty(serviceSubTaskCacheReq.getParam6()))
+                    subid = Long.valueOf(rsaPublicKeyExample.decryptedData(serviceSubTaskCacheReq.getParam6(), pri_key));
+
             } else if (flag == 1L) {
                 tid = Long.valueOf(serviceSubTaskCacheReq.getParam1());
                 pid = Long.valueOf(serviceSubTaskCacheReq.getParam2());
+                subid = Long.valueOf(serviceSubTaskCacheReq.getParam6());
             }
             if (CollectionUtils.isNotEmpty(serviceSubTaskCacheReq.getSvyTaskTemplateScriptVOS()) && serviceSubTaskCacheReq.getSvyTaskTemplateScriptVOS().size() > 0) {
                 //闂嵎
-                redisCache.deleteObject(pid + "-" + tid + "-WJscriptCache");
-                redisCache.setCacheListRight(pid + "-" + tid + "-WJscriptCache", serviceSubTaskCacheReq.getSvyTaskTemplateScriptVOS());
+                redisCache.deleteObject(pid + "-" + tid + "-" + subid + "-WJscriptCache");
+                redisCache.setCacheListRight(pid + "-" + tid + "-" + subid + "-WJscriptCache", serviceSubTaskCacheReq.getSvyTaskTemplateScriptVOS());
                 //璁剧疆杩囨湡鏃堕棿 3澶�
                 Long tims = Long.valueOf(3 * 24 * 3600);
-                boolean expire = redisCache.expire(pid + "-" + tid + "-WJscriptCache", tims);
+                boolean expire = redisCache.expire(pid + "-" + tid + "-" + subid + "-WJscriptCache", tims);
                 return 1;
             } else if (CollectionUtils.isNotEmpty(serviceSubTaskCacheReq.getIvrTaskTemplateScriptVOList()) && serviceSubTaskCacheReq.getIvrTaskTemplateScriptVOList().size() > 0) {
                 //闂嵎
-                redisCache.deleteObject(pid + "-" + tid + "-SFscriptCache");
-                redisCache.setCacheListRight(pid + "-" + tid + "-SFscriptCache", serviceSubTaskCacheReq.getIvrTaskTemplateScriptVOList());
+                redisCache.deleteObject(pid + "-" + tid + "-" + subid + "-SFscriptCache");
+                redisCache.setCacheListRight(pid + "-" + tid + "-" + subid + "-SFscriptCache", serviceSubTaskCacheReq.getIvrTaskTemplateScriptVOList());
                 //璁剧疆杩囨湡鏃堕棿 3澶�
                 Long tims = Long.valueOf(3 * 24 * 3600);
-                redisCache.expire(pid + "-" + tid + "-SFscriptCache", tims);
+                redisCache.expire(pid + "-" + tid + "-" + subid + "-SFscriptCache", tims);
                 return 1;
             }
         } catch (Exception e) {
@@ -801,6 +818,7 @@
         ServiceSubtaskEntity serviceSubtaskVO = new ServiceSubtaskEntity();
         serviceSubtaskVO.setTaskid(taskid);
         serviceSubtaskVO.setPatid(patid);
+        serviceSubtaskVO.setSubId(subid);
         List<ServiceSubtask> selectServiceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO);
         String score = "0";
         //涓嬮璺宠浆
@@ -819,6 +837,9 @@
 
             }
             nextScriptNo = svyTaskTemplateScriptVO.getNextScriptno();
+            if (StringUtils.isEmpty(nextScriptNo)) {
+                nextScriptNo = getNextScriptNo(svyTaskTemplateScriptVO.getTemplateID(), svyTaskTemplateScriptVO.getScriptContent());
+            }
             if (svyTaskTemplateScriptVO.getScore() != null) {
                 score = String.valueOf(svyTaskTemplateScriptVO.getScore());
             }
@@ -833,7 +854,10 @@
                     score = String.valueOf(svyTaskTemplateScriptVO.getScore());
                 }
             }
-            nextScriptNo = svyTaskTemplateScriptVO.getNextScriptno().toString();
+            nextScriptNo = svyTaskTemplateScriptVO.getNextScriptno();
+            if (StringUtils.isEmpty(nextScriptNo)) {
+                nextScriptNo = getNextScriptNo(svyTaskTemplateScriptVO.getTemplateID(), svyTaskTemplateScriptVO.getScriptContent());
+            }
         }
         ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(taskid);
         serviceSubtaskDetailVO.setQuestiontext(svyTaskTemplateScriptVO.getScriptContent());
@@ -848,9 +872,7 @@
         serviceSubtaskDetailVO.setCreateTime(new Date());
         serviceSubtaskDetailVO.setUpdateTime(new Date());
         serviceSubtaskDetailVO.setTemplateType(2);
-        serviceSubtaskDetailVO.setLibTemplateid(CollectionUtils.isNotEmpty(selectServiceSubtaskList) ?
-                (ObjectUtils.isNotEmpty(selectServiceSubtaskList.get(0).getLibtemplateid()) ?
-                        selectServiceSubtaskList.get(0).getLibtemplateid().intValue() : null): null);
+        serviceSubtaskDetailVO.setLibTemplateid(CollectionUtils.isNotEmpty(selectServiceSubtaskList) ? (ObjectUtils.isNotEmpty(selectServiceSubtaskList.get(0).getLibtemplateid()) ? selectServiceSubtaskList.get(0).getLibtemplateid().intValue() : null) : null);
         if (ObjectUtils.isNotEmpty(serviceTask)) {
             serviceSubtaskDetailVO.setGuid(serviceTask.getGuid());
             serviceSubtaskDetailVO.setOrgid(serviceTask.getOrgid());
@@ -955,6 +977,33 @@
         return map;
     }
 
+    private String getNextScriptNo(Long taskTemplateID, String scriptContent) {
+        SvyTaskTemplate svyTaskTemplate = svyTaskTemplateService.selectSvyTaskTemplateBySvyid(taskTemplateID);
+        SvyLibTemplateScript svyLibTemplateScript = new SvyLibTemplateScript();
+        svyLibTemplateScript.setSvyid(svyTaskTemplate.getTemplateid());
+        svyLibTemplateScript.setScriptContent(scriptContent);
+        List<SvyLibTemplateScript> svyLibTemplateScriptList = svyLibTemplateScriptService.selectSvyLibTemplateScriptList(svyLibTemplateScript);
+        if (CollectionUtils.isNotEmpty(svyLibTemplateScriptList)) {
+            return svyLibTemplateScriptList.get(0).getNextScriptno();
+        }
+        return null;
+    }
+
+    private Long getVoiceNextScriptNo(Long taskTemplateID, String scriptContent) {
+        IvrTaskTemplate ivrTaskTemplate = ivrTaskTemplateService.selectIvrTaskTemplateByID(taskTemplateID);
+        IvrLibaTemplateScript ivrLibaTemplateScript = new IvrLibaTemplateScript();
+        if (StringUtils.isEmpty(ivrTaskTemplate.getLibtemplateid())) return null;
+        ivrLibaTemplateScript.setTemplateid(Long.valueOf(ivrTaskTemplate.getLibtemplateid()));
+        ivrLibaTemplateScript.setScriptContent(scriptContent);
+        List<IvrLibaTemplateScript> ivrLibaTemplateScriptList = ivrLibaTemplateScriptService.selectIvrLibaTemplateScriptList(ivrLibaTemplateScript);
+
+        if (CollectionUtils.isNotEmpty(ivrLibaTemplateScriptList)) {
+            return ivrLibaTemplateScriptList.get(0).getNextScriptno();
+        }
+        return null;
+    }
+
+
     private Boolean sendTaskIds(List<Integer> sendTaskids, ServiceSubtask serviceSubtask) {
         for (Integer taskId : sendTaskids) {
             ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(Long.valueOf(taskId));
@@ -1042,6 +1091,7 @@
         ServiceSubtaskEntity serviceSubtaskVO = new ServiceSubtaskEntity();
         serviceSubtaskVO.setTaskid(taskid);
         serviceSubtaskVO.setPatid(patid);
+        serviceSubtaskVO.setPatid(subid);
         List<ServiceSubtask> selectServiceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO);
 
         String score = "0";
@@ -1061,6 +1111,10 @@
 
             }
             nextScriptNo = ivrTaskTemplateScriptVO.getNextScriptno() == null ? null : ivrTaskTemplateScriptVO.getNextScriptno().toString();
+            if (StringUtils.isEmpty(nextScriptNo)) {
+                nextScriptNo = "" + getVoiceNextScriptNo(ivrTaskTemplateScriptVO.getTemplateID(), ivrTaskTemplateScriptVO.getScriptContent());
+            }
+
             if (ivrTaskTemplateScriptVO.getScore() != null) {
                 score = String.valueOf(ivrTaskTemplateScriptVO.getScore());
             }
@@ -1079,6 +1133,9 @@
                 serviceSubtaskDetailVO.setMatchedtext(ivrTaskTemplateScriptVO.getQuestionResult() != null ? ivrTaskTemplateScriptVO.getQuestionResult().replaceAll("^\"|\"$", "") : ivrTaskTemplateScriptVO.getIvrtext());
                 serviceSubtaskDetailVO.setScore(ivrTaskTemplateScriptVO.getScore() != null ? ivrTaskTemplateScriptVO.getScore().toString() : "0");
                 nextScriptNo = ivrTaskTemplateScriptVO.getNextScriptno() == null ? null : ivrTaskTemplateScriptVO.getNextScriptno().toString();
+                if (StringUtils.isEmpty(nextScriptNo)) {
+                    nextScriptNo = "" + getVoiceNextScriptNo(ivrTaskTemplateScriptVO.getTemplateID(), ivrTaskTemplateScriptVO.getScriptContent());
+                }
                 if (ivrTaskTemplateScriptVO.getScore() != null) {
                     score = String.valueOf(ivrTaskTemplateScriptVO.getScore());
                 }
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 61869a6..4ff5af9 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
@@ -456,18 +456,18 @@
 
         if (patMedInhospList.size() > 0) {
             serviceSubtask1.setIsVisitAgain(2);
-            serviceSubtask1.setRemark(serviceSubtask1.getRemark() + ";鎮h�呭啀鍏ラ櫌浜�");
+            serviceSubtask1.setRemark(StringUtils.isNotEmpty(serviceSubtask.getRemark()) ? serviceSubtask.getRemark() + ";鎮h�呭啀鍏ラ櫌浜�" : "鎮h�呭啀鍏ラ櫌浜�");
             serviceSubtaskMapper.updateServiceSubtask(serviceSubtask1);
             return "鏃犻渶鍐嶆闅忚锛屾偅鑰呭啀鍏ラ櫌浜�";
         } else if (serviceSubtask1.getSendstate() == 4L) {
             serviceSubtask1.setIsVisitAgain(2);
-            serviceSubtask1.setRemark(serviceSubtask1.getRemark() + ";鏃犻渶鍐嶆闅忚锛屼换鍔¤鏍囪涓嶅湪鎵ц");
+            serviceSubtask1.setRemark(StringUtils.isNotEmpty(serviceSubtask.getRemark()) ? serviceSubtask.getRemark() + ";鏃犻渶鍐嶆闅忚锛屼换鍔¤鏍囪涓嶅湪鎵ц" : "鏃犻渶鍐嶆闅忚锛屼换鍔¤鏍囪涓嶅湪鎵ц");
             serviceSubtaskMapper.updateServiceSubtask(serviceSubtask1);
             return "鏃犻渶鍐嶆闅忚锛屼换鍔¤鏍囪涓嶅湪鎵ц";
         } else if (StringUtils.isNotEmpty(patArchive.getNotrequiredFlag()) && patArchive.getNotrequiredFlag().equals("1")) {
             serviceSubtask1.setIsVisitAgain(2);
             serviceSubtaskMapper.updateServiceSubtask(serviceSubtask1);
-            serviceSubtask1.setRemark(serviceSubtask1.getRemark() + ";鏃犻渶鍐嶆闅忚锛屾偅鑰呰鏍囪涓嶉渶瑕佽鏈嶅姟");
+            serviceSubtask1.setRemark(StringUtils.isNotEmpty(serviceSubtask.getRemark()) ? serviceSubtask.getRemark() + ";鏃犻渶鍐嶆闅忚锛屾偅鑰呰鏍囪涓嶉渶瑕佽鏈嶅姟" : "鏃犻渶鍐嶆闅忚锛屾偅鑰呰鏍囪涓嶉渶瑕佽鏈嶅姟");
             return "鏃犻渶鍐嶆闅忚锛屾偅鑰呰鏍囪涓嶉渶瑕佽鏈嶅姟";
         } else if (ObjectUtils.isNotEmpty(serviceSubtask1.getIsVisitAgain()) && serviceSubtask1.getIsVisitAgain() == 2) {
             return "鏃犻渶鍐嶆闅忚锛岃浠诲姟宸茬粡鍐嶆闅忚杩囦簡";
@@ -2303,7 +2303,7 @@
             String deptcodes = CollectionUtils.isEmpty(request.getDeptcodes()) ? null : String.join(",", request.getDeptcodes());
             if (!request.getTimeType().equals("month")) {
                 req.setBeginAdmitdate(DateUtils.parseDate(serviceStatisticsResponse.getTimePeriod()));
-                req.setEndAdmitdate(DateUtils.parseDate(serviceStatisticsResponse.getTimePeriod()));
+                req.setEndAdmitdate(DateUtils.addDays(DateUtils.parseDate(serviceStatisticsResponse.getTimePeriod()), 1));
             } else {
                 // year 绫诲瀷锛歵imePeriod 鏍煎紡涓� "yyyy-MM"锛屽彇褰撴湀绗竴澶╁拰鏈�鍚庝竴澶�
                 java.time.YearMonth ym = java.time.YearMonth.parse(serviceStatisticsResponse.getTimePeriod());
@@ -2371,13 +2371,13 @@
     public List<ServiceSubtaskStatistic> getSfStatistics(ServiceSubtaskCountReq serviceSubtaskCountReq) {
         log.info("getSfStatistics鐨勫叆鍙備负锛歿}", serviceSubtaskCountReq);
         String groupKey = "drcode";
-        if (serviceSubtaskCountReq.getLeavehospitaldistrictcodes() != null && !serviceSubtaskCountReq.getLeavehospitaldistrictcodes().isEmpty()) {
+        if (serviceSubtaskCountReq.getStatisticaltype() != null && serviceSubtaskCountReq.getStatisticaltype() == 1) {
             if (serviceSubtaskCountReq.getDrcode() != null && !serviceSubtaskCountReq.getDrcode().isEmpty()) {
                 groupKey = "drcode";
             } else {
                 groupKey = "leavehospitaldistrictcode";
             }
-        } else if (serviceSubtaskCountReq.getDeptcodes() != null && !serviceSubtaskCountReq.getDeptcodes().isEmpty()) {
+        } else if (serviceSubtaskCountReq.getStatisticaltype() != null && serviceSubtaskCountReq.getStatisticaltype() == 2) {
             if (serviceSubtaskCountReq.getDrcode() != null && !serviceSubtaskCountReq.getDrcode().isEmpty()) {
                 groupKey = "drcode";
             } else {
@@ -4046,23 +4046,19 @@
         List<Map<String, Object>> detail = new ArrayList<>();
 
         for (Map<String, Object> row : districtRows) {
-            String groupName = row.get("groupName") == null
-                    ? (row.get("groupCode") == null ? "" : row.get("groupCode").toString())
-                    : row.get("groupName").toString();
+            String groupName = row.get("groupName") == null ? (row.get("groupCode") == null ? "" : row.get("groupCode").toString()) : row.get("groupName").toString();
             long noCnt = row.get("noContinueCnt") == null ? 0L : Long.parseLong(row.get("noContinueCnt").toString());
             long yesCnt = row.get("continueCnt") == null ? 0L : Long.parseLong(row.get("continueCnt").toString());
             totalNoContinue += noCnt;
             totalContinue += yesCnt;
             Map<String, Object> item = new LinkedHashMap<>();
             item.put("鏈欢缁璤" + groupName, noCnt);
-            item.put("宸插欢缁璤"+groupName, yesCnt);
+            item.put("宸插欢缁璤" + groupName, yesCnt);
             detail.add(item);
         }
 
         for (Map<String, Object> row : deptRows) {
-            String groupName = row.get("groupName") == null
-                    ? (row.get("groupCode") == null ? "" : row.get("groupCode").toString())
-                    : row.get("groupName").toString();
+            String groupName = row.get("groupName") == null ? (row.get("groupCode") == null ? "" : row.get("groupCode").toString()) : row.get("groupName").toString();
             long noCnt = row.get("noContinueCnt") == null ? 0L : Long.parseLong(row.get("noContinueCnt").toString());
             long yesCnt = row.get("continueCnt") == null ? 0L : Long.parseLong(row.get("continueCnt").toString());
             totalNoContinue += noCnt;
diff --git a/smartor/src/main/java/com/smartor/service/impl/XHGatherPatArchiveServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/XHGatherPatArchiveServiceImpl.java
index 33438e1..22df1bf 100644
--- a/smartor/src/main/java/com/smartor/service/impl/XHGatherPatArchiveServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/XHGatherPatArchiveServiceImpl.java
@@ -316,6 +316,8 @@
         // 浣忛櫌淇℃伅
         patMedInhosp.setSerialnum(thiedInhospInfo.getInpatientId());
         patMedInhosp.setFuflag("1");
+        if (StringUtils.isNotEmpty(patArchive.getNotrequiredFlag()) && patArchive.getNotrequiredFlag().equals("1"))
+            patMedInhosp.setFuflag("0");
         patMedInhosp.setInhospstate("0".equals(cry) ? "0" : "1");
 
         // 鍖婚櫌鍜屽簥浣嶄俊鎭�
diff --git a/smartor/src/main/resources/mapper/smartor/ServiceOutPathMapper.xml b/smartor/src/main/resources/mapper/smartor/ServiceOutPathMapper.xml
index 45f96c6..0da8b03 100644
--- a/smartor/src/main/resources/mapper/smartor/ServiceOutPathMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/ServiceOutPathMapper.xml
@@ -10,6 +10,7 @@
         <result property="param2" column="param2"/>
         <result property="param3" column="param3"/>
         <result property="param5" column="param5"/>
+        <result property="param6" column="param6"/>
         <result property="createTime" column="create_time"/>
         <result property="updateTime" column="update_time"/>
         <result property="delFlag" column="del_flag"/>
@@ -24,6 +25,7 @@
                param2,
                param3,
                param5,
+               param6,
                create_time,
                update_time,
                radix,
@@ -37,26 +39,29 @@
             resultMap="ServiceOutPathResult">
         <include refid="selectServiceOutPathVo"/>
         where 1=1
-            and del_flag = 0
-            and orgid is null
-            <if test="param1 != null ">
-                and param1 = #{param1}
-            </if>
-            <if test="param2 != null ">
-                and param2 = #{param2}
-            </if>
-            <if test="param3 != null  and param3 != ''">
-                and param3 = #{param3}
-            </if>
-            <if test="param5 != null  and param5 != ''">
-                and param5 = #{param5}
-            </if>
-            <if test="createTime != null">
-                and create_time = #{createTime}
-            </if>
-            <if test="radix != null  and radix != ''">
-                and radix=#{radix}
-            </if>
+        and del_flag = 0
+        and orgid is null
+        <if test="param1 != null ">
+            and param1 = #{param1}
+        </if>
+        <if test="param2 != null ">
+            and param2 = #{param2}
+        </if>
+        <if test="param3 != null  and param3 != ''">
+            and param3 = #{param3}
+        </if>
+        <if test="param5 != null  and param5 != ''">
+            and param5 = #{param5}
+        </if>
+        <if test="param6 != null  and param6 != ''">
+            and param6 = #{param6}
+        </if>
+        <if test="createTime != null">
+            and create_time = #{createTime}
+        </if>
+        <if test="radix != null  and radix != ''">
+            and radix=#{radix}
+        </if>
 
     </select>
 
@@ -119,6 +124,9 @@
             <if test="param5 != null">param5 =
                 #{param5},
             </if>
+            <if test="param6 != null">param6 =
+                #{param6},
+            </if>
             <if test="radix != null">radix =
                 #{radix},
             </if>
@@ -150,9 +158,12 @@
             #{id}
         </foreach>
     </update>
-    <select id="selectAutoId" resultType="Integer" >
-        SELECT AUTO_INCREMENT FROM  INFORMATION_SCHEMA.TABLES
-         WHERE  TABLE_NAME  = 'service_out_path'  AND table_schema = DATABASE() and onorgid
+    <select id="selectAutoId" resultType="Integer">
+        SELECT AUTO_INCREMENT
+        FROM INFORMATION_SCHEMA.TABLES
+        WHERE TABLE_NAME = 'service_out_path'
+          AND table_schema = DATABASE()
+          and onorgid
     </select>
 
 </mapper>
diff --git a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
index 5a778bf..46f60a0 100644
--- a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
@@ -346,8 +346,9 @@
             </if>
         </if>
         <if test="deptOrDistrict==2">
+            AND (1=1
             <if test="leavehospitaldistrictcodes != null and leavehospitaldistrictcodes.size() > 0">
-                AND (leavehospitaldistrictcode IN
+                AND leavehospitaldistrictcode IN
                 <foreach collection="leavehospitaldistrictcodes" item="leavehospitaldistrictcode" open="("
                          separator=","
                          close=")">
@@ -357,14 +358,15 @@
             <if test=" leaveldeptcodes != null and leaveldeptcodes.size()>0">
                 OR deptcode IN
                 <foreach collection="leaveldeptcodes" item="leaveldeptcode" open="(" separator=","
-                         close="))">
+                         close=")">
                     #{leaveldeptcode}
                 </foreach>
-            </if>
+            </if>)
         </if>
         <if test="deptOrDistrict==3">
+            AND (1=1
             <if test="leavehospitaldistrictcodes != null and leavehospitaldistrictcodes.size() > 0">
-                AND (leavehospitaldistrictcode IN
+                AND leavehospitaldistrictcode IN
                 <foreach collection="leavehospitaldistrictcodes" item="leavehospitaldistrictcode" open="("
                          separator=","
                          close=")">
@@ -372,17 +374,19 @@
                 </foreach>
             </if>
             <if test=" visitDeptCodes != null and visitDeptCodes.size()>0">
-                and visit_dept_code IN
+                AND visit_dept_code IN
                 <foreach collection="visitDeptCodes" item="visitDeptCode" open="(" separator=","
-                         close="))">
+                         close=")">
                     #{visitDeptCode}
                 </foreach>
             </if>
+            )
         </if>
 
         <if test="deptOrDistrict==4">
+            AND (1=1
             <if test="leavehospitaldistrictcodes != null and leavehospitaldistrictcodes.size() > 0">
-                AND (leavehospitaldistrictcode IN
+                AND leavehospitaldistrictcode IN
                 <foreach collection="leavehospitaldistrictcodes" item="leavehospitaldistrictcode" open="("
                          separator=","
                          close=")">
@@ -392,10 +396,11 @@
             <if test=" visitDeptCodes != null and visitDeptCodes.size()>0">
                 OR visit_dept_code IN
                 <foreach collection="visitDeptCodes" item="visitDeptCode" open="(" separator=","
-                         close="))">
+                         close=")">
                     #{visitDeptCode}
                 </foreach>
             </if>
+            )
         </if>
 
         <if test="visitTime != null">
@@ -643,6 +648,8 @@
             AND date_format(visit_time,'%y%m%d') &lt;= date_format(#{endtime},'%y%m%d')
         </if>
         <if test="orgid != null  and orgid != ''">and orgid = #{orgid}</if>
+        <if test="serviceType != null and serviceType != ''">and service_type = #{serviceType}</if>
+        <if test="serviceTypes != null and serviceTypes != ''">and service_type IN (#{serviceTypes})</if>
         <if test="deptcode != null  and deptcode != ''">and deptcode = #{deptcode}</if>
         <if test="deptname != null  and deptname != ''">and deptname = #{deptname}</if>
         <if test="isabnormal != null">and isabnormal = #{isabnormal}</if>
@@ -722,6 +729,8 @@
             AND date_format(visit_time,'%y%m%d') &lt;= date_format(#{endtime},'%y%m%d')
         </if>
         <if test="orgid != null  and orgid != ''">and orgid = #{orgid}</if>
+        <if test="serviceType != null and serviceType != ''">and service_type = #{serviceType}</if>
+        <if test="serviceTypes != null and serviceTypes != ''">and service_type IN (#{serviceTypes})</if>
         <if test="isabnormal != null ">and isabnormal = #{isabnormal}</if>
         <if test="deptcode != null  and deptcode != ''">and deptcode = #{deptcode}</if>
         <if test="deptname != null  and deptname != ''">and deptname = #{deptname}</if>

--
Gitblit v1.9.3