From 9b1f0d5ff6e503060797083aa6693cc3fb6c35eb Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期四, 27 八月 2026 18:22:35 +0800
Subject: [PATCH] 【丽水】门诊完成接诊-生成随访任务逻辑

---
 smartor/src/main/java/com/smartor/service/impl/PatMedOuthospServiceImpl.java   |   90 ++++++++++++++++++++-
 ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java                   |   51 ++++++++++++
 smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java |   18 +++
 smartor/src/main/java/com/smartor/mapper/ServiceSubtaskMapper.java             |    2 
 smartor/src/main/java/com/smartor/service/IPatMedOuthospService.java           |   23 +++++
 smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml             |    9 ++
 6 files changed, 181 insertions(+), 12 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 e744bd1..a7b1e7b 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
@@ -1766,4 +1766,55 @@
         // 鍑洪櫌(鍙戦��)鏃堕棿 + 鏈琛ュ伩鏃堕棿 灏忎簬褰撳墠鏃堕棿 -> 瓒呮椂
         return deadline.getTime() < new Date().getTime();
     }
+
+    /**
+     * 澶勭悊瓒呮椂闅忚浠诲姟
+     * @return
+     */
+    public void dealSubtaskDeadline(Integer deadlineDay){
+
+        Date deadline = DateUtils.addDays(new Date(), deadlineDay);
+        //閫氳繃浠诲姟ID鎷垮埌鎮h�呬俊鎭�,骞朵笖闅忚鏃堕棿寰楁槸浠婂ぉ涔嬪墠鐨�
+        ServiceSubtaskEntity serviceSubtaskVO = new ServiceSubtaskEntity();
+        serviceSubtaskVO.setSendstate(7L);
+        serviceSubtaskVO.setVisitCount(1);
+        serviceSubtaskVO.setEndOutHospTime(deadline);
+        List<ServiceSubtask> serviceSubtaskList
+                = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO);
+        log.info("銆恉ealSubtaskDeadline銆戣幏鍙栧埌{}涓秴鏃朵换鍔�", serviceSubtaskList.size());
+        for (ServiceSubtask serviceSubtask : serviceSubtaskList) {
+            PatMedInhosp patMedInhosp = new PatMedInhosp();
+            patMedInhosp.setInhospid(serviceSubtask.getInhospid());
+            List<PatMedInhosp> patMedInhospList = iPatMedInhospService.selectPatMedInhospList(patMedInhosp);
+
+            if (patMedInhospList.size() > 0) {
+                serviceSubtask.setIsVisitAgain(2);
+                serviceSubtask.setRemark(StringUtils.isNotEmpty(serviceSubtask.getRemark()) ? serviceSubtask.getRemark() + ";鎮h�呭啀鍏ラ櫌浜�" : "鎮h�呭啀鍏ラ櫌浜�");
+                serviceSubtask.setSendstate(4L);
+                serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
+                //return "鏃犻渶鍐嶆闅忚锛屾偅鑰呭啀鍏ラ櫌浜�";
+            }else {
+                continue;
+            }
+            //鏂板鍐嶆闅忚浠诲姟
+            ServiceSubtask serviceSubtaskAgain = DtoConversionUtils.sourceToTarget(serviceSubtask, ServiceSubtask.class);
+            serviceSubtaskAgain.setId(null);
+            serviceSubtaskAgain.setUpid(serviceSubtask.getId().intValue());
+            serviceSubtaskAgain.setVisitCount(serviceSubtask.getVisitCount() + 1);
+            serviceSubtaskAgain.setSendstate(2L);
+            serviceSubtaskAgain.setCreateTime(new Date());
+            serviceSubtaskAgain.setUpdateTime(new Date());
+            serviceSubtaskAgain.setVisitType(serviceSubtask.getVisitType());
+            serviceSubtaskAgain.setVisitDeptCode(serviceSubtask.getVisitDeptCode());
+            serviceSubtaskAgain.setVisitDeptName(serviceSubtask.getVisitDeptName());
+            int i = serviceSubtaskMapper.insertServiceSubtask(serviceSubtaskAgain);
+            if (i == 1) {
+                //鍐嶆闅忚浠诲姟鍒涘缓鎴愬姛鍚庯紝鍘熶换鍔℃敼涓哄け璐ョ姸鎬�
+                serviceSubtask.setIsVisitAgain(2);
+                serviceSubtask.setSendstate(5L);
+                serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
+            }
+        }
+    }
+
 }
diff --git a/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskMapper.java b/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskMapper.java
index 2deee1d..c57c908 100644
--- a/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskMapper.java
+++ b/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskMapper.java
@@ -58,6 +58,8 @@
 
     public List<ServiceSubtask> selectServiceSubtaskListAgain(ServiceSubtaskEntity serviceSubtaskVO);
 
+    public List<ServiceSubtask> selectServiceSubtaskListDeadLine(ServiceSubtaskEntity serviceSubtaskVO);
+
     public List<Integer> selectSendstateByCondition(ServiceSubtask serviceSubtask);
 
     /**
diff --git a/smartor/src/main/java/com/smartor/service/IPatMedOuthospService.java b/smartor/src/main/java/com/smartor/service/IPatMedOuthospService.java
index 1a2ab3b..d1aea55 100644
--- a/smartor/src/main/java/com/smartor/service/IPatMedOuthospService.java
+++ b/smartor/src/main/java/com/smartor/service/IPatMedOuthospService.java
@@ -71,6 +71,25 @@
 
     public ServiceSubtask boxedServiceSubtask(ServiceTask serviceTask, PatMedOuthosp patMedOuthosp, PatArchive patArchive);
 
-    //闂ㄨ瘖璁板綍鍐嶆闅忚
-    public Integer followUpAgainByPatMedOuthosp(PatMedOuthosp patMedOuthosp, Date adminDate, Integer visitTimeNum);
+    /**
+     * 闂ㄨ瘖璁板綍棣栨闅忚
+     * @param patMedOuthosp
+     * @return
+     */
+    public Integer followUpByPatMedOuthosp(PatMedOuthosp patMedOuthosp, Integer visitTimeNum);
+
+    /**
+     * 闂ㄨ瘖璁板綍鍐嶆闅忚
+     * @param patMedOuthosp
+     * @return
+     */
+    public Integer followUpAgainByPatMedOuthosp(PatMedOuthosp patMedOuthosp, Integer visitTimeNum);
+
+    /**
+     * 闂ㄨ瘖璁板綍澶勭悊
+     * @param patMedOuthosp
+     * @return
+     */
+    public Integer dealPatMedOuthosp(PatMedOuthosp patMedOuthosp, Integer visitTimeNum);
+
 }
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 4488aed..226d9b9 100644
--- a/smartor/src/main/java/com/smartor/service/impl/PatMedOuthospServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/PatMedOuthospServiceImpl.java
@@ -512,6 +512,7 @@
         serviceSubtask.setVisitDeptCode(patMedOuthosp.getDeptcode());
         serviceSubtask.setVisitDeptName(patMedOuthosp.getDeptname());
         serviceSubtask.setUpdateTime(new Date());
+        serviceSubtask.setAdmindate(patMedOuthosp.getAdmitdate());
         //璁剧疆鍙戦�佹椂闂�
         if (serviceTask.getSendDay() == null) serviceTask.setSendDay(1L);
         Date newDate = addDays(patMedOuthosp.getAdmitdate(), serviceTask.getSendDay().intValue());
@@ -536,15 +537,82 @@
     /**
      *
      * @param patMedOuthosp
+     * @param visitTimeNum
      * @return
      */
     @Override
-    public Integer followUpAgainByPatMedOuthosp(PatMedOuthosp patMedOuthosp, Date adminDate, Integer visitTimeNum) {
-        int hoursToAdd = visitTimeNum * 24;
-        Calendar calendar = Calendar.getInstance();
-        calendar.setTime(adminDate);
-        calendar.add(Calendar.HOUR_OF_DAY, hoursToAdd);
-        Date newDate = calendar.getTime();
+    public Integer dealPatMedOuthosp(PatMedOuthosp patMedOuthosp, Integer visitTimeNum){
+        Integer num = 0;
+        ServiceSubtaskEntity serviceSubtask = new ServiceSubtaskEntity();
+        serviceSubtask.setInhospid(patMedOuthosp.getId());
+        serviceSubtask.setServiceType("3");
+        serviceSubtask.setVisitCount(1);
+        List<ServiceSubtask> serviceSubtasks = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtask);
+        if(CollectionUtils.isEmpty(serviceSubtasks)){
+            num = followUpByPatMedOuthosp(patMedOuthosp, visitTimeNum);
+        }else {
+            num = followUpAgainByPatMedOuthosp(patMedOuthosp, visitTimeNum);
+        }
+        return num;
+    }
+
+    /**
+     * 闂ㄨ瘖棣栨闅忚
+     * @param patMedOuthosp
+     * @return
+     */
+    @Override
+    public Integer followUpByPatMedOuthosp(PatMedOuthosp patMedOuthosp, Integer visitTimeNum) {
+//        if(ObjectUtils.isEmpty(patMedOuthosp.getFudate())){
+            Date adminDate = patMedOuthosp.getAdmitdate();
+            Date fuDate = addDays(adminDate, visitTimeNum);
+            patMedOuthosp.setFudate(fuDate);
+//        }
+
+        PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedOuthosp.getPatid());
+
+        //鏍规嵁鎮h�呯瀹わ紝鑾峰彇璇ョ柧鐥呯殑闀挎湡浠诲姟
+        ServiceTaskdept serviceTaskdept = new ServiceTaskdept();
+        serviceTaskdept.setLongtask(1L);
+        serviceTaskdept.setDeptCode(patMedOuthosp.getDeptcode());
+        serviceTaskdept.setServiceType("3");
+        List<ServiceTaskdept> serviceTaskdeptList = serviceTaskdeptMapper.selectServiceTaskdeptList(serviceTaskdept);
+        if (CollectionUtils.isEmpty(serviceTaskdeptList) || serviceTaskdeptList.size() == 0) {
+            patMedOuthosp.setDeptcheckFlag("2");
+            patMedOuthosp.setRemark("閫氳繃閮ㄩ棬,娌℃湁鎵惧埌闂ㄨ瘖闅忚浠诲姟ID");
+            updatePatMedOuthosp(patMedOuthosp);
+        } else {
+            for (ServiceTaskdept serviceTaskdept1 : serviceTaskdeptList) {
+                writeInSubTask(serviceTaskdept1.getTaskId(), true, patMedOuthosp, patArchive, 1);
+            }
+        }
+
+        // 鏍规嵁鎮h�呯殑鐤剧梾锛岃幏鍙栬鐤剧梾鐨勯暱鏈熶换鍔�
+//        ServiceTaskdiag serviceTaskdiag = new ServiceTaskdiag();
+//        serviceTaskdiag.setLongtask(1L);
+//        serviceTaskdiag.setIcd10code(patMedOuthosp.getIcd10code());
+//        List<ServiceTaskdiag> serviceTaskdiags = serviceTaskdiagMapper.selectServiceTaskdiagList(serviceTaskdiag);
+//        //濡傛灉閮ㄩ棬妯℃澘涓虹┖锛堝皢deptIsNull璁剧疆涓簍rue锛�
+//        if (org.apache.commons.collections4.CollectionUtils.isEmpty(serviceTaskdiags) || serviceTaskdiags.size() == 0) {
+//            patMedOuthosp.setDiagcheckFlag("2");
+//            patMedOuthosp.setRemark("閫氳繃icd10,娌℃湁鎵惧埌闂ㄨ瘖闅忚浠诲姟ID");
+//            updatePatMedOuthosp(patMedOuthosp);
+//        } else {
+//            for (ServiceTaskdiag serviceTaskdept1 : serviceTaskdiags) {
+//                writeInSubTask(serviceTaskdept1.getTaskId(), true, patMedOuthosp, patArchive, 2);
+//            }
+//        }
+        return 1;
+    }
+    /**
+     * 闂ㄨ瘖鍐嶆闅忚
+     * @param patMedOuthosp
+     * @return
+     */
+    @Override
+    public Integer followUpAgainByPatMedOuthosp(PatMedOuthosp patMedOuthosp, Integer visitTimeNum) {
+        Date adminDate = patMedOuthosp.getAdmitdate();
+        Date newDate = addDays(adminDate, visitTimeNum);
 
         Integer i = 0;
         String deptcode = patMedOuthosp.getDeptcode();
@@ -564,10 +632,18 @@
             serviceSubtask0.setFinishtime(adminDate);
             serviceSubtaskMapper.updateServiceSubtask(serviceSubtask0);
 
-            ServiceSubtask serviceSubtask1 = serviceSubtaskList0.get(0);
+            ServiceSubtask serviceSubtask1 = DtoConversionUtils.sourceToTarget(serviceSubtask0, ServiceSubtask.class);
+            serviceSubtask1.setId(null);
             serviceSubtask1.setSendstate(2L);
+            serviceSubtask1.setUpid(serviceSubtask0.getId().intValue());
+            serviceSubtask1.setVisitCount(serviceSubtask0.getVisitCount() + 1);
+            serviceSubtask1.setVisitType(serviceSubtask0.getVisitType());
+            serviceSubtask1.setVisitDeptCode(serviceSubtask0.getVisitDeptCode());
+            serviceSubtask1.setVisitDeptName(serviceSubtask0.getVisitDeptName());
             serviceSubtask1.setCreateTime(new Date());
             serviceSubtask1.setUpdateTime(new Date());
+            serviceSubtask1.setFinishtime(null);
+            serviceSubtask1.setAdmindate(adminDate);
 
             serviceSubtask1.setVisitTime(newDate);
             serviceSubtask1.setLongSendTime(newDate);
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 7c39a28..a83ab65 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java
@@ -1243,10 +1243,22 @@
             i = patMedOuthospService.insertPatMedOuthosp(patMedOuthosp);
 
         }
-        Date adminDate = externalJZInfo.getJiuZhenRQ();
+        Date adminDate = patMedOuthosp.getAdmitdate();
         //瀹屾垚鎺ヨ瘖 宸茬粡瀹屾垚浠诲姟鍐嶆闅忚
-        if(ObjectUtils.isNotEmpty(visitTimeNum) && ObjectUtils.isNotEmpty(adminDate)){
-            patMedOuthospService.followUpAgainByPatMedOuthosp(patMedOuthosp, adminDate, visitTimeNum);
+        if(ObjectUtils.isNotEmpty(visitTimeNum)
+                && ObjectUtils.isNotEmpty(adminDate)
+                && StringUtils.isNotEmpty(patMedOuthosp.getFuflag())
+                && patMedOuthosp.getFuflag().equals("1")){
+            if(visitTimeUnit.equals("澶�")){
+                visitTimeNum = visitTimeNum;
+            }else if(visitTimeUnit.equals("鍛�")){
+                visitTimeNum = visitTimeNum * 7;
+            }else if(visitTimeUnit.equals("鏈�")){
+                visitTimeNum = visitTimeNum * 30;
+            }else if(visitTimeUnit.equals("骞�")){
+                visitTimeNum = visitTimeNum * 365;
+            }
+            patMedOuthospService.dealPatMedOuthosp(patMedOuthosp, visitTimeNum);
         }
 
         if (i > 0) {
diff --git a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
index 1dcc537..1683cd0 100644
--- a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
@@ -3089,5 +3089,14 @@
         t.taskid
     </select>
 
+    <select id="selectServiceSubtaskListDeadLine" parameterType="com.smartor.domain.entity.ServiceSubtaskEntity"
+            resultMap="ServiceSubtaskResult">
+        <include refid="selectServiceSubtaskVo"/>
+        where 1=1
+        and del_flag = 0
+        and visit_count = 1
+        and endtime
+    </select>
+
 </mapper>
 

--
Gitblit v1.9.3