From af3ec57db40f80fba5903aaedae5e66bf46a7ed9 Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期三, 01 七月 2026 10:57:18 +0800
Subject: [PATCH] 【景宁】任务组开发

---
 smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java |  148 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 148 insertions(+), 0 deletions(-)

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 9c5449b..14acb1a 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
@@ -116,6 +116,12 @@
     private IServiceSubtaskDetailTraceService traceService;
 
     @Autowired
+    private IServiceTaskScheduleService serviceTaskScheduleService;
+
+    @Autowired
+    private com.smartor.common.ScheduleSubtaskBuilder scheduleSubtaskBuilder;
+
+    @Autowired
     private FtpService ftpService;
 
     @Autowired
@@ -727,6 +733,24 @@
                         serviceTaskoperService.insertServiceTaskoper(serviceTaskoper);
                     }
 
+                } else if (serviceTaskVO.getAppltype().equals("5")) {
+                    // 浠诲姟缁勶細蹇呴』涓洪暱鏈熶换鍔★紙鍚﹀垯 findMatchingTaskIds 鎵笉鍒帮紝鏃犳硶鑷姩绾冲叆鏂板嚭闄㈡偅鑰咃級
+                    if (serviceTaskVO.getLongTask() == null || serviceTaskVO.getLongTask() != 1) {
+                        throw new BaseException("appltype=5 浠诲姟缁勫繀椤讳负闀挎湡浠诲姟锛坙ongTask=1锛�");
+                    }
+                    // 淇濆瓨璁″垝 + 鏄庣粏
+                    ServiceTaskScheduleVO scheduleVO = serviceTaskVO.getServiceTaskScheduleVO();
+                    if (scheduleVO == null) {
+                        throw new BaseException("appltype=5 浠诲姟缁勶細serviceTaskScheduleVO 涓嶈兘涓虹┖");
+                    }
+                    scheduleVO.setTaskid(serviceTask.getTaskid());
+                    scheduleVO.setOrgid(serviceTask.getOrgid());
+                    scheduleVO.setCampusid(serviceTask.getCampusid());
+                    scheduleVO.setCreateBy(serviceTask.getCreateBy());
+                    log.info("----serviceTaskSchedule鐨勫�间负锛歿}", scheduleVO);
+                    serviceTaskScheduleService.saveScheduleWithDetail(scheduleVO);
+                    // 缁戝畾缁村害鍐欐潯浠惰〃锛堜緵 HIS 鑷姩绾冲叆鍖归厤锛宭ongtask 鎭�=1锛�
+                    bindDimensionCondition(serviceTask, serviceTaskVO);
                 } else {
                     ServiceTaskdept serviceTaskdept = new ServiceTaskdept();
                     serviceTaskdept.setTaskId(serviceTask.getTaskid());
@@ -812,6 +836,20 @@
                         serviceSubtask.setLongSendTime(patTaskRelevance.getLongSendTime());
                         serviceSubtask.setVisitTime(patTaskRelevance.getVisittime());
                     }
+
+                    // ===== appltype=5 浠诲姟缁勶細鎸� schedule 鐨� detailList 娲剧敓澶氭潯 subtask =====
+                    if ("5".equals(serviceTaskVO.getAppltype())) {
+                        ServiceTaskSchedule schedule = serviceTaskScheduleService.selectByTaskid(serviceTask.getTaskid());
+                        if (schedule == null) {
+                            throw new BaseException("appltype=5 浠诲姟缁勶細鏈壘鍒� taskid=" + serviceTask.getTaskid() + " 鐨勮鍒�");
+                        }
+                        List<ServiceTaskScheduleDetail> detailList =
+                                serviceTaskScheduleService.selectDetailByScheduleid(schedule.getId());
+                        scheduleSubtaskBuilder.buildSubtasksForPatient(
+                                serviceTask, serviceTaskVO, schedule, detailList, patTaskRelevance, serviceSubtask);
+                        continue;
+                    }
+
                     serviceSubtaskMapper.insertServiceSubtask(serviceSubtask);
                     serviceSubtask.getId().intValue();
 
@@ -1026,6 +1064,23 @@
                             }
                         }
                     }
+                } else if (serviceTaskVO.getAppltype().equals("5")) {
+                    // 浠诲姟缁勪慨鏀癸細鍒犳棫 schedule + 鏄庣粏锛岄噸寤恒�俿ubtask 涓婇潰宸叉壒閲忔竻鐞嗐��
+                    if (serviceTaskVO.getLongTask() == null || serviceTaskVO.getLongTask() != 1) {
+                        throw new BaseException("appltype=5 浠诲姟缁勫繀椤讳负闀挎湡浠诲姟锛坙ongTask=1锛�");
+                    }
+                    ServiceTaskScheduleVO scheduleVO = serviceTaskVO.getServiceTaskScheduleVO();
+                    if (scheduleVO == null) {
+                        throw new BaseException("appltype=5 浠诲姟缁勶細serviceTaskScheduleVO 涓嶈兘涓虹┖");
+                    }
+                    scheduleVO.setTaskid(serviceTask.getTaskid());
+                    scheduleVO.setOrgid(serviceTask.getOrgid());
+                    scheduleVO.setCampusid(serviceTask.getCampusid());
+                    scheduleVO.setCreateBy(serviceTask.getUpdateBy());
+                    serviceTaskScheduleService.saveScheduleWithDetail(scheduleVO);
+                    // 鍏堟竻鏃х淮搴︽潯浠惰〃锛屽啀鎸夋渶鏂板叆鍙傞噸鍐欙紙闃茶繃鏈熺淮搴︽畫鐣欏鑷磋绾冲叆锛�
+                    clearDimensionCondition(serviceTask.getTaskid());
+                    bindDimensionCondition(serviceTask, serviceTaskVO);
                 }
             }
             if (ObjectUtils.isNotEmpty(serviceTaskVO.getIvrTaskTemplateVO())) {
@@ -1079,6 +1134,20 @@
                     serviceSubtask.setVisitTime(patTaskRelevance.getVisittime());
                     serviceSubtask.setTextParam(new Gson().toJson(serviceTaskVO.getTextParam()));
                     if (patTaskRelevance.getIsoperation() != null) {
+                        // appltype=5 浠诲姟缁勶細杩藉姞鎮h�咃紙isoperation=1锛夎蛋璁″垝娲剧敓锛涗慨鏀癸紙2锛�/鍒犻櫎锛�3锛変粛璧板師閫昏緫
+                        if ("5".equals(serviceTaskVO.getAppltype()) && patTaskRelevance.getIsoperation() == 1) {
+                            ServiceTaskSchedule schedule = serviceTaskScheduleService.selectByTaskid(serviceTask.getTaskid());
+                            if (schedule == null) {
+                                throw new BaseException("appltype=5 浠诲姟缁勶細鏈壘鍒� taskid=" + serviceTask.getTaskid() + " 鐨勮鍒�");
+                            }
+                            List<ServiceTaskScheduleDetail> detailList =
+                                    serviceTaskScheduleService.selectDetailByScheduleid(schedule.getId());
+                            serviceSubtask.setUpdateBy(serviceTask.getUpdateBy());
+                            serviceSubtask.setCreateBy(serviceTask.getUpdateBy());
+                            scheduleSubtaskBuilder.buildSubtasksForPatient(
+                                    serviceTask, serviceTaskVO, schedule, detailList, patTaskRelevance, serviceSubtask);
+                            continue;
+                        }
                         if (patTaskRelevance.getIsoperation() == 2) {
                             serviceSubtask.setUpdateBy(serviceTask.getUpdateBy());
                             serviceSubtaskMapper.updateServiceSubtaskByCondition(serviceSubtask);
@@ -1132,6 +1201,85 @@
         return map;
     }
 
+    /**
+     * 浠诲姟缁勶紙appltype=5锛夌粦瀹氱淮搴﹀啓鏉′欢琛紝渚� HIS 鑷姩绾冲叆鍖归厤銆�
+     * longtask 鎭�=1锛堝惁鍒欑嫭绔嬫壂鎻�/涓绘壂鎻忔寜 longtask=1 鏌ヤ笉鍒帮級銆�
+     * 澶嶇敤鐜版湁 service_taskdept锛堢瀹eptType=1/鐥呭尯deptType=2锛夈�乻ervice_taskdiag锛堢柧鐥咃級銆�
+     * 鎵嬫湳缁村害鏈湡涓嶅啓锛堟殏涓嶆敮鎸佽嚜鍔ㄧ撼鍏ワ級銆�
+     */
+    private void bindDimensionCondition(ServiceTask serviceTask, ServiceTaskVO vo) {
+        // 绉戝
+        if (StringUtils.isNotEmpty(vo.getDeptcode())) {
+            for (String deptCode : vo.getDeptcode().split(",")) {
+                if (StringUtils.isEmpty(deptCode)) continue;
+                ServiceTaskdept d = new ServiceTaskdept();
+                d.setTaskId(serviceTask.getTaskid());
+                d.setTaskName(serviceTask.getTaskName());
+                d.setOrgid(serviceTask.getOrgid());
+                d.setLongtask(1L);
+                d.setDeptCode(deptCode);
+                d.setDeptType("1");
+                d.setServiceType(vo.getServiceType());
+                serviceTaskdeptService.insertServiceTaskdept(d);
+            }
+        }
+        // 鐥呭尯
+        if (StringUtils.isNotEmpty(vo.getLeavehospitaldistrictcode())) {
+            for (String wardCode : vo.getLeavehospitaldistrictcode().split(",")) {
+                if (StringUtils.isEmpty(wardCode)) continue;
+                ServiceTaskdept d = new ServiceTaskdept();
+                d.setTaskId(serviceTask.getTaskid());
+                d.setTaskName(serviceTask.getTaskName());
+                d.setOrgid(serviceTask.getOrgid());
+                d.setLongtask(1L);
+                d.setDeptCode(wardCode);
+                d.setDeptType("2");
+                d.setServiceType(vo.getServiceType());
+                serviceTaskdeptService.insertServiceTaskdept(d);
+            }
+        }
+        // 鐤剧梾锛堢敤 split(",")锛屽嬁鐓ф妱 appltype=3 鐜扮綉鐨� split("$") bug锛�
+        if (StringUtils.isNotEmpty(vo.getIcd10code())) {
+            String[] codes = vo.getIcd10code().split(",");
+            String[] names = StringUtils.isNotEmpty(vo.getIcd10name()) ? vo.getIcd10name().split(",") : new String[0];
+            for (int i = 0; i < codes.length; i++) {
+                if (StringUtils.isEmpty(codes[i])) continue;
+                ServiceTaskdiag dg = new ServiceTaskdiag();
+                dg.setTaskId(serviceTask.getTaskid());
+                dg.setTaskName(serviceTask.getTaskName());
+                dg.setOrgid(serviceTask.getOrgid());
+                dg.setLongtask(1L);
+                dg.setServiceType(vo.getServiceType());
+                dg.setIcd10code(codes[i]);
+                dg.setIcd10name(i < names.length ? names[i] : null);
+                dg.setGuid(serviceTask.getGuid());
+                dg.setCreateTime(new Date());
+                serviceTaskdiagService.insertServiceTaskdiag(dg);
+            }
+        }
+    }
+
+    /**
+     * 浠诲姟缁勪慨鏀规椂锛屽厛杞垹璇� task 鏃х殑缁村害鏉′欢琛ㄨ褰曪紙闃茶繃鏈熺淮搴︽畫鐣欏鑷磋绾冲叆锛夈��
+     */
+    private void clearDimensionCondition(Long taskId) {
+        ServiceTaskdept dq = new ServiceTaskdept();
+        dq.setTaskId(taskId);
+        List<ServiceTaskdept> depts = serviceTaskdeptService.selectServiceTaskdeptList(dq);
+        if (CollectionUtils.isNotEmpty(depts)) {
+            for (ServiceTaskdept d : depts) {
+                serviceTaskdeptService.deleteServiceTaskdeptById(d.getId());
+            }
+        }
+        ServiceTaskdiag gq = new ServiceTaskdiag();
+        gq.setTaskId(taskId);
+        List<ServiceTaskdiag> diags = serviceTaskdiagService.selectServiceTaskdiagList(gq);
+        if (CollectionUtils.isNotEmpty(diags)) {
+            for (ServiceTaskdiag g : diags) {
+                serviceTaskdiagService.deleteServiceTaskdiagById(g.getId());
+            }
+        }
+    }
 
     @Override
     public void phoneCallBack(PhoneCallBackVO phoneCallBackVO) {

--
Gitblit v1.9.3