From 2e9b1bcc853cd3560091f081370cc881ae67729d Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期四, 20 八月 2026 17:07:12 +0800
Subject: [PATCH] 【市一】出院记录同步定时任务调整

---
 ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java |  262 +++++++++++++++++++++++++++++++---------------------
 1 files changed, 156 insertions(+), 106 deletions(-)

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 941b96f..d6e0ef9 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
@@ -6,6 +6,7 @@
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.gson.Gson;
+import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.domain.entity.SysDept;
 import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.dx.MessageSend;
@@ -25,6 +26,7 @@
 import com.smartor.common.MtSubmitSmUtil;
 import com.smartor.common.QwenLLMUtil;
 import com.smartor.domain.*;
+import com.smartor.domain.VO.ServiceSubtaskDetailTraceVO;
 import com.smartor.domain.entity.ServiceSubtaskEntity;
 import com.smartor.mapper.*;
 import com.smartor.service.*;
@@ -47,6 +49,7 @@
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
+import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
@@ -146,6 +149,9 @@
     ISysDeptService sysDeptService;
 
     @Autowired
+    IServiceSubtaskDetailTraceService serviceSubtaskDetailTraceService;
+
+    @Autowired
     IPatMedOuthospService patMedOuthospService;
 
     @Autowired
@@ -234,6 +240,38 @@
     }
 
     /**
+     * 瀹氭椂鍙戦�丼LTD婊℃剰搴﹀紓甯镐俊鎭�
+     */
+    public void sendSLTDMYDExceptInfo() {
+        //1.鑾峰彇鍙戦�佷汉宸ュ彿
+        ServiceSubtaskDetailTraceVO subtaskDetailTraceVO = new ServiceSubtaskDetailTraceVO();
+        subtaskDetailTraceVO.setHandleFlag("0");
+        List<ServiceSubtaskDetailTrace> serviceSubtaskDetailTraces = serviceSubtaskDetailTraceService.selectServiceSubtaskDetailTtraceList(subtaskDetailTraceVO);
+        // 鎶� dutyDeptPersonCode 鏁寸悊鍒� list 涓紙濡傛灉澶氫釜浜虹敤閫楀彿鍒嗗壊锛屽垯灞曞紑骞跺幓閲嶏級
+        List<String> dutyDeptPersonCodeList = serviceSubtaskDetailTraces.stream().map(ServiceSubtaskDetailTrace::getDutyDeptPersonCode).filter(StringUtils::isNotBlank).flatMap(code -> Arrays.stream(code.split(","))).map(String::trim).filter(StringUtils::isNotBlank).distinct()  // 鍘婚噸
+                .collect(Collectors.toList());
+        // 鑾峰彇鈥滅渷绔嬪悓寰锋弧鎰忓害寮傚父鍐呭鎻愰啋"
+        SysConfig sysConfig = sysConfigMapper.checkConfigKeyUnique("sltd.myd.send.except.contont");
+        String exceptContent = sysConfig.getConfigValue();
+
+        // 鑾峰彇鈥滅渷绔嬪悓寰锋弧鎰忓害寮傚父鍐呭鎻愰啋娴嬭瘯浜哄伐鍙封��
+        String testPerson = sysConfigMapper.checkConfigKeyUnique("sltd.myd.send.test.person").getConfigValue();
+        if (StringUtils.isNotBlank(testPerson)) {
+            String[] split = testPerson.split(",");
+            if (CollectionUtils.isEmpty(dutyDeptPersonCodeList)) dutyDeptPersonCodeList = Arrays.asList(split);
+            else dutyDeptPersonCodeList.addAll(Arrays.asList(split));
+        }
+
+        if (CollectionUtils.isNotEmpty(dutyDeptPersonCodeList)) {
+            for (String dutyDeptPersonCode : dutyDeptPersonCodeList) {
+                log.info("銆恠endSLTDMYDExceptInfo銆戝彂閫佷汉宸ュ彿锛歿}", dutyDeptPersonCode);
+                String data = MessageSend.sendMsg(exceptContent, "7", dutyDeptPersonCode, LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
+            }
+        }
+    }
+
+
+    /**
      * 瀹氭椂澶勭悊澶栭摼鐨勬暟鎹�
      */
     public void runServiceSubTaskAnswer() {
@@ -249,6 +287,17 @@
         LocalDateTime tomorrowEnd = tomorrowStart.plusDays(1).minusSeconds(1);     // 鏄庡ぉ 23:59:59
         ixhGatherPatArchiveService.getAppointRecordInfo("2", tomorrowStart, tomorrowEnd);
     }
+
+    /**
+     * 姣忔湀15鍙峰拰鏈堝簳锛屾煡璇㈠苟澶勭悊 HIS 鏁版嵁锛堝悓寰凤紝鍗楀崕锛�
+     */
+    public void dealHisDataHalfMonth() {
+        LocalDateTime now = LocalDateTime.now();
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        String formattedNow = now.format(formatter);
+        dealHisData(formattedNow);
+    }
+
 
     /**
      * HIS鏁版嵁閲囬泦
@@ -387,7 +436,7 @@
                         list.add("FH0109.23");
                         list.add("FH0109.53");
                         serviceSLTDInhospReqVO.setStatusList(list);
-                        log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滈鍏ラ櫌鈥濋噰闆嗘暟鎹叆鍙傦細{}", serviceSLTDInhospReqVO);
+//                        log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滈鍏ラ櫌鈥濋噰闆嗘暟鎹叆鍙傦細{}", serviceSLTDInhospReqVO);
                         serviceSLTDHealthcareRecordService.queryHealthcareRecordList(serviceSLTDInhospReqVO);
                         log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滈鍏ラ櫌鈥濈祼鏉熼噰闆嗘暟鎹紝闄㈠尯锛歿}", cid);
 
@@ -405,7 +454,7 @@
                         List<String> listStr = new ArrayList<>();
                         listStr.add("FH0109.24");
                         serviceSLTDInhospReqVO.setStatusList(listStr);
-                        log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滃叆闄⑩�濋噰闆嗘暟鎹叆鍙傦細{}", serviceSLTDInhospReqVO);
+//                        log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滃叆闄⑩�濋噰闆嗘暟鎹叆鍙傦細{}", serviceSLTDInhospReqVO);
                         serviceSLTDHealthcareRecordService.queryHealthcareRecordList(serviceSLTDInhospReqVO);
                         log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滃叆闄⑩�濈祼鏉熼噰闆嗘暟鎹紝闄㈠尯锛歿}", cid);
 
@@ -428,7 +477,7 @@
                         //棰勫嚭闄�
                         list2.add("FH0109.25");
                         serviceSLTDInhospReqVO.setStatusList(list2);
-                        log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滃嚭闄⑩�濋噰闆嗘暟鎹叆鍙傦細{}", serviceSLTDInhospReqVO);
+//                        log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滃嚭闄⑩�濋噰闆嗘暟鎹叆鍙傦細{}", serviceSLTDInhospReqVO);
                         serviceSLTDHealthcareRecordService.queryHealthcareRecordList(serviceSLTDInhospReqVO);
                         log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滃嚭闄⑩�濇潫閲囬泦鏁版嵁锛岄櫌鍖猴細{}", cid);
                     }
@@ -449,7 +498,7 @@
      * @param endDateStr   鏃ユ湡缁撴潫 yyyy-MM-dd
      */
     private void collectSegmentData(Long cid, String startDateStr, String endDateStr) {
-        // 棰勫叆闄�
+//        // 棰勫叆闄�
         log.info("銆恉ealHisData銆戦鍏ラ櫌寮�濮嬮噰闆嗘暟鎹紝闄㈠尯锛歿}锛屾椂闂存锛歿} ~ {}", cid, startDateStr, endDateStr);
         ServiceSLTDInhospReqVO reqVO = new ServiceSLTDInhospReqVO();
         reqVO.setOrgId("20001001");
@@ -599,13 +648,31 @@
         ServiceSLTDInhospReqVO serviceSLTDInhospReqVO = new ServiceSLTDInhospReqVO();
         serviceSLTDInhospReqVO.setOrgId("20001001");
         Long outpPage = 1L;
+        int totalCount = 0;  // 缁熻鎬诲叡閲囬泦鐨勮嵂鍝佹暟閲�
+
         while (true) {
             serviceSLTDInhospReqVO.setCurrent(outpPage);
             serviceSLTDInhospReqVO.setSize(OUTP_PAGE_SIZE);
-            log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滆嵂鍝佹暟鎹�濋噰闆嗙{}椤垫暟鎹�", outpPage);
-           Boolean b = serviceSLTDHealthcareRecordService.queryMedicationItemList(serviceSLTDInhospReqVO);
-            log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滆嵂鍝佹暟鎹�濋噰闆嗙粨鏋滐細{}", b);
-            outpPage++;
+            log.info("銆恉ealHisData銆戠渷绔嬪悓寰穃"鑽搧鏁版嵁\"閲囬泦绗瑊}椤垫暟鎹�", outpPage);
+
+            try {
+                Integer fetchedCount = serviceSLTDHealthcareRecordService.queryMedicationItemList(serviceSLTDInhospReqVO);
+                log.info("銆恉ealHisData銆戠渷绔嬪悓寰穃"鑽搧鏁版嵁\"绗瑊}椤甸噰闆嗗埌{}鏉¤褰�", outpPage, fetchedCount);
+
+                totalCount += fetchedCount != null ? fetchedCount : 0;
+
+                // 濡傛灉杩斿洖鐨勬暟鎹噺灏忎簬 pageSize锛岃鏄庡凡缁忔槸鏈�鍚庝竴椤典簡锛岄��鍑哄惊鐜�
+                if (fetchedCount == null || fetchedCount < OUTP_PAGE_SIZE) {
+                    log.info("銆恉ealHisData銆戠渷绔嬪悓寰穃"鑽搧鏁版嵁\"閲囬泦瀹屾垚锛屾�婚〉鏁�:{}, 鎬昏{}鏉¤褰�", outpPage, totalCount);
+                    break;
+                }
+
+                outpPage++;
+            } catch (Exception e) {
+                log.error("銆恉ealHisData銆戠渷绔嬪悓寰穃"鑽搧鏁版嵁\"绗瑊}椤甸噰闆嗗け璐�", outpPage, e);
+                // 鍑洪敊鏃朵篃鍙互閫夋嫨閫�鍑烘垨缁х画锛岃繖閲岄�夋嫨閫�鍑洪伩鍏嶆棤闄愰噸璇�
+                break;
+            }
         }
     }
 
@@ -650,7 +717,7 @@
     public void dealHisData2() {
         //灏嗘偅鑰呬俊鎭�佸嚭鍏ラ櫌鏁版嵁鍏ㄩ儴閲囬泦
         // 鎸囧畾鐨勫紑濮嬫棩鏈�
-        LocalDate endDate = LocalDate.of(2025, 3, 3);
+        LocalDate endDate = LocalDate.of(2026, 7, 6);
         // 褰撳墠鏃ユ湡
         LocalDate currentDate = LocalDate.now();
         // 瀹氫箟鏃ユ湡鏍煎紡
@@ -762,91 +829,16 @@
      * 澶勭悊琛ュ伩浠诲姟
      */
     public void compensateTask() {
-        //鑾峰彇鍒皊endstate=3 骞朵笖 visit_time涓哄皬浜庣瓑浜庝粖澶╃殑subtask
+        //鑾峰彇鍒皊endstate=3銆�1 骞朵笖 visit_time涓哄皬浜庣瓑浜庝粖澶╃殑subtask
+        List<Long> list = Arrays.asList(3L, 1L);
         ServiceSubtaskEntity serviceSubtaskVO = new ServiceSubtaskEntity();
-        serviceSubtaskVO.setSendstate(3L);
-        serviceSubtaskVO.setVisitTime(new Date());
-        List<ServiceSubtask> serviceSubtaskList = serviceSubtaskMapper.getCompensateServiceSubtaskList(serviceSubtaskVO);
-        for (ServiceSubtask serviceSubtask : serviceSubtaskList) {
-            //鏍规嵁褰撳墠鐨勬墽琛屾柟寮忥紝鑾峰彇涓嬩竴绉嶆墽琛屾柟寮�
-            ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform();
-            serviceSubtaskPreachform.setTaskid(serviceSubtask.getTaskid());
-            serviceSubtaskPreachform.setSubid(serviceSubtask.getId());
-            serviceSubtaskPreachform.setOrgid(serviceSubtask.getOrgid());
-            List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
-            //鑾峰彇褰撳墠鎵ц鏂瑰紡鐨勫簭鍙�
-            Optional<Long> currentSort = serviceSubtaskPreachforms.stream().filter(item -> serviceSubtask.getCurrentPreachform().equals(item.getPreachform())).map(ServiceSubtaskPreachform::getSort).findFirst();
-            Optional<Long> id = serviceSubtaskPreachforms.stream().filter(item -> serviceSubtask.getCurrentPreachform().equals(item.getPreachform())).map(ServiceSubtaskPreachform::getId).findFirst();
-            if (currentSort.isPresent()) {
-                //1鍏堟鏌ヤ竴涓嬶紝鏄笉鏄湁鎵ц鐘舵�佹槸瀹屾垚鐨勶紙鎬曚箣鍓嶅凡缁忔湁瀹岀殑浜嗭紝娌℃湁灏唖ervuce_subtask鐨勭姸鎬佹敼鎴愬姛锛岃繖閲屽啀妫�鏌ヤ竴涓嬶級
-                boolean finishState = serviceSubtaskPreachforms.stream().allMatch(item -> item.getSendstate().equals("9"));
-                if (finishState) {
-                    serviceSubtask.setSendstate(6L);
-                    serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
-                    continue;
-                }
-
-                //2鍒ゆ柇涓�涓嬶紝褰撳墠鐨剆ort鏄笉鏄瓑浜庨渶瑕佹墽琛岀殑鎬讳釜鏁帮紝濡傛灉绛変簬鐨勮瘽锛岃鏄庢槸鏈�鍚庝竴涓紝鐩存帴灏唖ervuce_subtask鐨勭姸鎬佹敼鎴�5锛屾墽琛屽け璐ュ氨琛屼簡
-                Long cs = currentSort.get();
-                if (cs.equals(serviceSubtaskPreachforms.size())) {
-                    serviceSubtask.setSendstate(7L);
-                    serviceSubtask.setRemark("澶勭悊琛ュ伩浠诲姟,褰撳墠澶勭悊鏈�鍚庤ˉ鍋匡紝鍏ㄩ儴鎵ц澶辫触锛堣秴鏃讹級");
-
-                    serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
-                    //淇敼鍙戦�佹柟寮忕殑鐘舵�佷负澶辫触
-                    serviceSubtaskPreachform.setSendstate("5");
-                    serviceSubtaskPreachform.setId(id.get());
-
-                    serviceSubtaskPreachformMapper.updateServiceSubtaskPreachform(serviceSubtaskPreachform);
-                    continue;
-                }
-
-                //3.涓嶆槸鏈�鍚庝竴涓紝鑾峰彇鍒颁笅涓�涓墽琛屾柟寮�(鍥犱负閮芥槸鍦ㄤ粖澶╂墽琛岋紝閭e氨鐩存帴鍙戝嚭鍘诲氨瀹屼簡)
-                sfHandlle(serviceSubtask);
-            }
-        }
-    }
-
-    /**
-     * 闀挎湡浠诲姟鍙戦��
-     */
-    public void longTaskSendTest(Long subId) {
-        //鑾峰彇浠诲姟淇℃伅
-        ServiceTask st = new ServiceTask();
-        st.setDelFlag("0");
-        st.setLongTask(1);
-        List<ServiceTask> serviceTasks = serviceTaskMapper.selectServiceTaskList(st);
-        log.info("銆恖ongTaskSend銆戣幏鍙栧埌{}涓暱鏈熶换鍔�", serviceTasks.size());
-        for (ServiceTask serviceTask : serviceTasks) {
-            CommonTaskcallMQ commonTaskcallMQ = new CommonTaskcallMQ();
-            commonTaskcallMQ.setTaskid(serviceTask.getTaskid());
-            commonTaskcallMQ.setPreachform(serviceTask.getPreachform());
-            commonTaskcallMQ.setSendType("2");
-
-            //閫氳繃浠诲姟ID鎷垮埌鎮h�呬俊鎭�,骞朵笖闅忚鏃堕棿寰楁槸浠婂ぉ涔嬪墠鐨�
-            ServiceSubtaskEntity serviceSubtaskVO = new ServiceSubtaskEntity();
-            serviceSubtaskVO.setTaskid(commonTaskcallMQ.getTaskid());
-            serviceSubtaskVO.setSendstate(2L);
-            serviceSubtaskVO.setIsVisitAgain(1);
-            serviceSubtaskVO.setSubId(subId);
+        List<ServiceSubtask> serviceSubtaskList = new ArrayList<>();
+        for (Long sendstate : list) {
+            serviceSubtaskVO.setSendstate(sendstate);
             serviceSubtaskVO.setVisitTime(new Date());
-            List<ServiceSubtask> selectServiceSubtaskList = serviceSubtaskMapper.queryServiceSubtaskList(serviceSubtaskVO);
-            for (ServiceSubtask serviceSubtask : selectServiceSubtaskList) {
-                sfHandlle(serviceSubtask);
-            }
+            List<ServiceSubtask> compensateServiceSubtaskList = serviceSubtaskMapper.getCompensateServiceSubtaskList(serviceSubtaskVO);
+            serviceSubtaskList.addAll(compensateServiceSubtaskList);
         }
-    }
-
-    /**
-     * 澶勭悊琛ュ伩浠诲姟
-     */
-    public void compensateTaskTest(Long subId) {
-        //鑾峰彇鍒皊endstate=3 骞朵笖 visit_time涓哄皬浜庣瓑浜庝粖澶╃殑subtask
-        ServiceSubtaskEntity serviceSubtaskVO = new ServiceSubtaskEntity();
-        serviceSubtaskVO.setSendstate(3L);
-        serviceSubtaskVO.setSubId(subId);
-        serviceSubtaskVO.setVisitTime(new Date());
-        List<ServiceSubtask> serviceSubtaskList = serviceSubtaskMapper.getCompensateServiceSubtaskList(serviceSubtaskVO);
         for (ServiceSubtask serviceSubtask : serviceSubtaskList) {
             //鏍规嵁褰撳墠鐨勬墽琛屾柟寮忥紝鑾峰彇涓嬩竴绉嶆墽琛屾柟寮�
             ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform();
@@ -868,7 +860,9 @@
 
                 //2鍒ゆ柇涓�涓嬶紝褰撳墠鐨剆ort鏄笉鏄瓑浜庨渶瑕佹墽琛岀殑鎬讳釜鏁帮紝濡傛灉绛変簬鐨勮瘽锛岃鏄庢槸鏈�鍚庝竴涓紝鐩存帴灏唖ervuce_subtask鐨勭姸鎬佹敼鎴�5锛屾墽琛屽け璐ュ氨琛屼簡
                 Long cs = currentSort.get();
-                if (cs.equals(serviceSubtaskPreachforms.size())) {
+
+                if (cs.equals(serviceSubtaskPreachforms.size())
+                        && isSubtaskDeadline(serviceSubtask, serviceSubtaskPreachforms)) {
                     serviceSubtask.setSendstate(7L);
                     serviceSubtask.setRemark("澶勭悊琛ュ伩浠诲姟,褰撳墠澶勭悊鏈�鍚庤ˉ鍋匡紝鍏ㄩ儴鎵ц澶辫触锛堣秴鏃讹級");
 
@@ -1146,10 +1140,18 @@
                             //鐪佺珛鍚屽痉鐨勭煭淇″彂閫佹柟寮�
                             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")) {
+                                // 瑙f瀽 result=0&description=鎴愬姛&faillist= 鏍煎紡锛坮esult=0鎴愬姛锛�1澶辫触锛�
+                                log.info("銆恠fHandlle銆戠渷绔嬪悓寰风煭淇″彂閫佽繑鍥烇細{}", data);
+                                String[] pairs = data.split("&");
+                                String resultVal = null;
+                                for (String pair : pairs) {
+                                    String[] kv = pair.split("=", 2);
+                                    if ("result".equals(kv[0])) {
+                                        resultVal = kv.length > 1 ? kv[1] : null;
+                                        break;
+                                    }
+                                }
+                                if ("0".equals(resultVal)) {
                                     isSuccess = "true";
                                 }
                             }
@@ -1234,11 +1236,7 @@
                     String patid = rsaPublicKeyExample.encryptedData(serviceSubtask.getPatid().toString(), pub_key);
                     String subId = rsaPublicKeyExample.encryptedData(serviceSubtask.getId().toString(), pub_key);
                     String url = null;
-                    url = localIP + ":" + req_path + "/outsideChainwt?param1=" + taskId +
-                            "&param2=" +  patid +
-                            "&param3=" + URLEncoder.encode(ivrTask1.getTaskName(), StandardCharsets.UTF_8.toString()) +
-                            "&param5=false" +
-                            "$param6=" + subId;
+                    url = localIP + ":" + req_path + "/outsideChainwt?param1=" + taskId + "&param2=" + patid + "&param3=" + URLEncoder.encode(ivrTask1.getTaskName(), StandardCharsets.UTF_8.toString()) + "&param5=false" + "$param6=" + subId;
 
                     ServiceOutPath serviceOutPath = new ServiceOutPath();
                     serviceOutPath.setParam1(taskId);
@@ -1379,15 +1377,15 @@
                 serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
                 return "-1";
             }
-
             // 褰搒ort绛変簬鍒楄〃size鏃讹紝骞朵笖鎵�鏈塻endstate閮戒笉绛変簬9锛屽垯杩斿洖-1
-            if (currentSort.get().equals((long) serviceSubtaskPreachforms.size())) {
+            if (currentSort.get().equals((long) serviceSubtaskPreachforms.size())
+                    && isSubtaskDeadline(serviceSubtask, serviceSubtaskPreachforms)) {
                 if (allSendStateNot1AndNot9) {
                     //璇存槑鍏ㄥ彂閫佸け璐ヤ簡
                     serviceSubtask.setSendstate(7L);
                     serviceSubtask.setFinishtime(null);
                     log.error("getSendPreachform鏂规硶 妫�鏌ユ槸鍚︽墍鏈塻endstate涓嶇瓑浜�9, 鍏ㄥけ璐ヤ簡");
-                    serviceSubtask.setRemark(StringUtils.isNotEmpty(serviceSubtask.getRemark()) ? serviceSubtask.getRemark() + "," + "鎵�鏈夊彂閫佹柟寮忓潎鏈幏鍙栫粨鏋滐紝浠诲姟澶辫触锛堣秴鏃讹級" : "鎵�鏈夊彂閫佹柟寮忓潎鏈幏鍙栫粨鏋滐紝浠诲姟澶辫触锛堣秴鏃讹級");
+                    serviceSubtask.setRemark(StringUtils.isNotEmpty(serviceSubtask.getRemark()) ? serviceSubtask.getRemark() + "," + "鎵�鏈夋墽琛屾柟寮忓潎鏈幏鍙栫粨鏋滐紝浠诲姟澶辫触锛堣秴鏃讹級" : "鎵�鏈夋墽琛屾柟寮忓潎鏈幏鍙栫粨鏋滐紝浠诲姟澶辫触锛堣秴鏃讹級");
                     serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
                     //淇敼鍙戦�佺姸鎬�
                     setFail(serviceSubtaskPreachforms, serviceSubtask);
@@ -1537,6 +1535,26 @@
         }
     }
 
+    public void collectHISYesterday() {
+        try {
+            // 鑾峰彇鏄ㄥぉ0鐐瑰埌浠婂ぉ0鐐圭殑鏃堕棿鑼冨洿
+            LocalDateTime todayZero = LocalDateTime.now().with(LocalTime.MIN);
+            LocalDateTime yesterdayZero = todayZero.minusDays(1);
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+            String startTime = yesterdayZero.format(formatter);
+            String endTime = todayZero.format(formatter);
+            // HIS鏁版嵁閲囬泦
+            log.info("銆恈ollectHISYesterday銆慔IS寮�濮嬮噰闆嗘暟鎹�");
+            // 绔嬪嵆杩斿洖锛屽悗鍙板紓姝ユ墽琛�
+            CompletableFuture.runAsync(() -> {
+                ichService.syncMedInhosp(startTime, endTime);
+            });
+            log.info("銆恈ollectHISYesterday銆慔IS缁撴潫閲囬泦鏁版嵁");
+        } catch (Exception e) {
+            log.error("銆恈ollectHISYesterday銆慔IS鏁版嵁閲囬泦寮傚父", e);
+        }
+    }
+
     public Boolean setSuccessPreachForm(ServiceSubtask serviceSubtask, String preachform, String remark, String failSendstate) {
         if (preachform.equals("-1")) {
             //璇存槑閮戒笉闇�瑕佹墽琛屼簡
@@ -1565,7 +1583,7 @@
 //        //浜哄伐鐨勬湭鍙戦�佺姸鎬侊紝闇�瑕佹煡2
 //        if (preachform.equals("1") && StringUtils.isNotEmpty(failSendstate) && Long.valueOf(failSendstate) > 2)
 //            serviceSubtaskPreachform.setSendstate("2");
-
+        log.error("-----serviceSubtaskPreachform鐨勫叆鍙傛槸锛焮}", serviceSubtaskPreachform);
         List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
         if (CollectionUtils.isNotEmpty(serviceSubtaskPreachforms)) {
             ServiceSubtaskPreachform serviceSubtaskPreachform1 = serviceSubtaskPreachforms.get(0);
@@ -1578,7 +1596,8 @@
             serviceSubtaskPreachformMapper.updateServiceSubtaskPreachform(serviceSubtaskPreachform1);
 
             //濡傛灉褰撳墠鐨刾reachform宸茬粡鏄渶鍚庝竴涓簡锛岄偅鐩存帴灏唖erviceSubtask鐨剆endstate鐘舵�佹敼鎴�7灏辫浜�(鍏ㄨ秴鏃朵簡)
-            if (serviceSubtaskPreachform1.getSort() == sspCount.size()) {
+            if (serviceSubtaskPreachform1.getSort() == sspCount.size()
+                    && isSubtaskDeadline(serviceSubtask, serviceSubtaskPreachforms)) {
                 if (failSendstate.equals("4") || failSendstate.equals("5")) {
                     serviceSubtask.setCurrentPreachform(preachform);
                     serviceSubtask.setSendstate(7L);
@@ -1695,4 +1714,35 @@
             log.error("銆恟ollTaskGroupCycle銆戞粴鍔ㄨ皟搴﹀紓甯�", e);
         }
     }
+
+    /**
+     * 闅忚浠诲姟鏄惁瓒呮椂
+     * @param serviceSubtask
+     * @param serviceSubtaskPreachforms
+     * @return
+     */
+    public boolean isSubtaskDeadline(ServiceSubtask serviceSubtask, List<ServiceSubtaskPreachform> serviceSubtaskPreachforms){
+        if (ObjectUtils.isNotEmpty(serviceSubtask)) {
+            //鍙湁鍑洪櫌闅忚鍜屼笓鐥呴殢璁挎湁瓒呮椂
+            if(StringUtils.isNotEmpty(serviceSubtask.getServiceType()) &&
+                    !serviceSubtask.getServiceType().equals("2") && !serviceSubtask.getServiceType().equals("13")){
+                return true;
+            }
+        }
+        if (Objects.isNull(serviceSubtask) || CollectionUtils.isEmpty(serviceSubtaskPreachforms)) {
+            return false;
+        }
+        // 鍩哄噯鏃跺埢锛氬嚭闄㈡椂闂� + 鍙戦�佹棩锛坰endDay 缂虹渷鎸� 1锛夛紝骞跺厹搴曢伩鍏� NPE/鑴忔暟鎹�
+        ServiceTask serviceTask = serviceTaskMapper.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
+        int sendDay = serviceTask != null && serviceTask.getSendDay() != null ? serviceTask.getSendDay().intValue() : 1;
+        Date deadline = DateUtils.addDays(serviceSubtask.getEndtime(), sendDay);
+        int sumCompensateTime = CollectionUtils.isEmpty(serviceSubtaskPreachforms) ? 0 : serviceSubtaskPreachforms.stream()
+                .mapToInt(x -> x.getCompensateTime() == null ? 0 : Integer.parseInt(x.getCompensateTime()))
+                .sum();
+        sumCompensateTime = sumCompensateTime + 1;
+        // 鍙ˉ鍋挎渶鍚庝竴姝ヨ嚜韬殑琛ュ伩鏃堕棿锛堝ぉ锛夛紝鑴忓�间竴寰嬫寜 0 鍏滃簳
+        deadline = DateUtils.addDays(deadline, sumCompensateTime);
+        // 鍑洪櫌(鍙戦��)鏃堕棿 + 鏈琛ュ伩鏃堕棿 灏忎簬褰撳墠鏃堕棿 -> 瓒呮椂
+        return deadline.getTime() < new Date().getTime();
+    }
 }

--
Gitblit v1.9.3