From 066e23c438ec762c522d39817b513a13ec6b3767 Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期一, 14 九月 2026 14:03:38 +0800
Subject: [PATCH] 【景宁】景宁 只要存在相同诊断、患者的门诊记录则当再次随访处理

---
 smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java |   91 +++++++++++++++++++++++++++++++--------------
 1 files changed, 62 insertions(+), 29 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 ad85650..fb0add6 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
@@ -22,13 +22,11 @@
 import com.smartor.common.MtSubmitSmUtil;
 import com.smartor.common.ScheduleSubtaskBuilder;
 import com.smartor.config.PhoneUtils;
+import com.smartor.domain.DTO.QuestionCountKsOrBqDTO;
 import com.smartor.domain.DTO.QuestionResultDTO;
 import com.smartor.domain.DTO.ServiceSubtaskDetailDTO;
 import com.smartor.domain.*;
-import com.smartor.domain.VO.HeLibraryCountVO;
-import com.smartor.domain.VO.QuestionResultVO;
-import com.smartor.domain.VO.ServiceSubtaskCotinueCountVO;
-import com.smartor.domain.VO.TransferDeptVO;
+import com.smartor.domain.VO.*;
 import com.smartor.domain.entity.ServiceSubtaskEntity;
 import com.smartor.mapper.*;
 import com.smartor.service.*;
@@ -672,10 +670,8 @@
             //濡傛灉涓嶅瓨鍦紝鍒欐柊澧�
             ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
             if (ObjectUtils.isNotEmpty(serviceTask)) {
-                serviceSubtask.setDeptcode(serviceTask.getDeptcode());
                 serviceSubtask.setTaskDesc(serviceTask.getTaskDesc());
                 serviceSubtask.setTaskName(serviceTask.getTaskName());
-                serviceSubtask.setDeptname(serviceTask.getDeptname());
                 serviceSubtask.setTemplatename(serviceTask.getTemplatename());
             }
 
@@ -2923,12 +2919,10 @@
                 collect = rawData.stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getDrcode()).orElse("Unknown")));
                 break;
             case "management_doctor_code":
-                rawData = rawData.stream()
-                        .peek(item -> {
-                            item.setDrname(item.getManagementDoctor());
-                            item.setDrcode(item.getManagementDoctorCode());
-                        })
-                        .collect(Collectors.toList());
+                rawData = rawData.stream().peek(item -> {
+                    item.setDrname(item.getManagementDoctor());
+                    item.setDrcode(item.getManagementDoctorCode());
+                }).collect(Collectors.toList());
                 collect = rawData.stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getManagementDoctorCode()).orElse("Unknown")));
                 break;
             case "deptcode":
@@ -5012,7 +5006,7 @@
     }
 
     @Override
-    public List<ServiceSubtaskDetailRatioExport> statQuestionOption(List<Long> taskIds, Date startOutHospTime, Date endOutHospTime, String scriptContent, Double scoreStart, Double scoreEnd,String valueType) {
+    public List<ServiceSubtaskDetailRatioExport> statQuestionOption(List<Long> taskIds, Date startOutHospTime, Date endOutHospTime, String scriptContent, Double scoreStart, Double scoreEnd, String valueType) {
         //鍏堟竻鐞嗕竴涓嬮噸澶嶆暟鎹�
         List<Long> repeatIds = serviceSubtaskDetailMapper.selectRepeatDetailIds();
         if (!CollectionUtils.isEmpty(repeatIds)) {
@@ -5028,14 +5022,10 @@
                 // 濡傛灉鏈夊鏉$洰鏍囧�硷紝鎷嗗垎鎴愬琛�
                 for (String value : values) {
                     //鍏堝幓 result 涓煡涓�涓嬶紝鏈夋病鏈夎繖涓� questiontext 鍜屽搴旂殑 targetvalue
-                    ServiceSubtaskDetailRatioExport existingExport = result.stream()
-                            .filter(e -> e.getQuestiontext().equals(export.getQuestiontext())
-                                    && value.trim().equals(e.getTargetvalue()))
-                            .findFirst()
-                            .orElse(null);
+                    ServiceSubtaskDetailRatioExport existingExport = result.stream().filter(e -> e.getQuestiontext().equals(export.getQuestiontext()) && value.trim().equals(e.getTargetvalue())).findFirst().orElse(null);
                     if (existingExport != null && existingExport.getRatio().equals("0") && existingExport.getCount().equals("0")) {
                         //濡傛灉瀛樺湪锛屽垯灏� result 閲岀殑杩欎釜闂鎵�瀵瑰簲鐨� Targetvalue=value 杩欐潯鏁版嵁鏇存柊鎴愬綋鍓嶈繖鏉℃暟鎹�
-                        if(value.equals(export.getOptionresult())) {
+                        if (value.equals(export.getOptionresult())) {
                             existingExport.setRatio(export.getRatio());
                             existingExport.setScore(export.getScore());
                             existingExport.setCount(export.getCount());
@@ -5063,15 +5053,62 @@
         return result;
     }
 
+    /*
+     * 鏍规嵁绉戝鎴栫梾鍖虹粺璁¢棶鍗烽�夐」(绉戝銆侀鐩煡璇㈢殑绉戝璇勫垎琛�)
+     */
     @Override
-    public List<ServiceSubtaskDetailRatioExport> statQuestionOptionBySubtaskIds(List<Long> subtaskIds, Date startOutHospTime, Date endOutHospTime, String scriptContent, Double scoreStart, Double scoreEnd,String valueType) {
+    public List<QuestionCountKsOrBqDTO> statQuestionOptionByKsOrBq(QuestionCountKsOrBqVO questionCountKsOrBqVO) {
+        List<QuestionCountKsOrBqDTO> questionCountKsOrBqDTOS = serviceSubtaskMapper.statQuestionOptionByKsOrBq(questionCountKsOrBqVO);
+
+        // 澶勭悊 targetvalue锛氭寜 & 鍒嗗壊鎴愬鏉¤褰�
+        List<QuestionCountKsOrBqDTO> result = new ArrayList<>();
+        for (QuestionCountKsOrBqDTO questionCountKsOrBqDTO : questionCountKsOrBqDTOS) {
+            if (StringUtils.isNotEmpty(questionCountKsOrBqDTO.getTargetvalue()) && questionCountKsOrBqDTO.getTargetvalue().contains("&")) {
+                String[] values = questionCountKsOrBqDTO.getTargetvalue().split("&");
+                // 濡傛灉鏈夊鏉$洰鏍囧�硷紝鎷嗗垎鎴愬琛�
+                for (String value : values) {
+                    //鍏堝幓 result 涓煡涓�涓嬶紝鏈夋病鏈夎繖涓� questiontext 鍜屽搴旂殑 targetvalue
+                    QuestionCountKsOrBqDTO existingExport = result.stream().filter(e -> e.getQeustionText().equals(questionCountKsOrBqDTO.getQeustionText()) && value.trim().equals(e.getTargetvalue())).findFirst().orElse(null);
+                    if (existingExport != null && existingExport.getAnswerCount().equals("0") && existingExport.getSingleScore().equals("0")) {
+                        //濡傛灉瀛樺湪锛屽垯灏� result 閲岀殑杩欎釜闂鎵�瀵瑰簲鐨� Targetvalue=value 杩欐潯鏁版嵁鏇存柊鎴愬綋鍓嶈繖鏉℃暟鎹�
+                        if (value.equals(questionCountKsOrBqDTO.getAsrtext())) {
+                            existingExport.setAsrtext(questionCountKsOrBqDTO.getAsrtext());
+                            existingExport.setAnswerCount(questionCountKsOrBqDTO.getAnswerCount());
+                            existingExport.setSingleScore(questionCountKsOrBqDTO.getSingleScore());
+                            existingExport.setAvgScore(questionCountKsOrBqDTO.getAvgScore());
+                        }
+                    } else if (existingExport != null && !existingExport.getAnswerCount().equals("0")) {
+                        continue;
+                    } else {
+                        QuestionCountKsOrBqDTO qcDto = DtoConversionUtils.sourceToTarget(questionCountKsOrBqDTO, QuestionCountKsOrBqDTO.class);
+                        qcDto.setTargetvalue(value.trim()); // targetvalue 鏄剧ず鍗曚釜閫夐」
+                        if (!value.equals(qcDto.getAsrtext())) {
+                            existingExport.setAsrtext(null);
+                            existingExport.setAnswerCount("0");
+                            existingExport.setSingleScore("0");
+                            existingExport.setAvgScore("0");
+                        }
+                        result.add(qcDto);
+                    }
+                }
+            } else {
+                // targetvalue 涓嶅寘鍚� &锛岀洿鎺ユ坊鍔犲埌缁撴灉
+                result.add(questionCountKsOrBqDTO);
+            }
+        }
+
+        return result;
+    }
+
+    @Override
+    public List<ServiceSubtaskDetailRatioExport> statQuestionOptionBySubtaskIds(List<Long> subtaskIds, Date startOutHospTime, Date endOutHospTime, String scriptContent, Double scoreStart, Double scoreEnd, String valueType) {
         //鍏堟竻鐞嗕竴涓嬮噸澶嶆暟鎹�
         List<Long> repeatIds = serviceSubtaskDetailMapper.selectRepeatDetailIds();
         if (!CollectionUtils.isEmpty(repeatIds)) {
             serviceSubtaskDetailMapper.deleteRepeatDetailByIds(repeatIds);
         }
 
-        List<ServiceSubtaskDetailRatioExport> serviceSubtaskDetailRatioExports = serviceSubtaskMapper.statQuestionOptionBySubtaskIds(subtaskIds, startOutHospTime, endOutHospTime, scoreStart, scoreEnd, scriptContent,valueType);
+        List<ServiceSubtaskDetailRatioExport> serviceSubtaskDetailRatioExports = serviceSubtaskMapper.statQuestionOptionBySubtaskIds(subtaskIds, startOutHospTime, endOutHospTime, scoreStart, scoreEnd, scriptContent, valueType);
         // 澶勭悊 targetvalue锛氭寜 & 鍒嗗壊鎴愬鏉¤褰�
         List<ServiceSubtaskDetailRatioExport> result = new ArrayList<>();
         for (ServiceSubtaskDetailRatioExport export : serviceSubtaskDetailRatioExports) {
@@ -5080,14 +5117,10 @@
                 // 濡傛灉鏈夊鏉$洰鏍囧�硷紝鎷嗗垎鎴愬琛�
                 for (String value : values) {
                     //鍏堝幓 result 涓煡涓�涓嬶紝鏈夋病鏈夎繖涓� questiontext 鍜屽搴旂殑 targetvalue
-                    ServiceSubtaskDetailRatioExport existingExport = result.stream()
-                            .filter(e -> e.getQuestiontext().equals(export.getQuestiontext())
-                                    && value.trim().equals(e.getTargetvalue()))
-                            .findFirst()
-                            .orElse(null);
+                    ServiceSubtaskDetailRatioExport existingExport = result.stream().filter(e -> e.getQuestiontext().equals(export.getQuestiontext()) && value.trim().equals(e.getTargetvalue())).findFirst().orElse(null);
                     if (existingExport != null && existingExport.getRatio().equals("0") && existingExport.getCount().equals("0")) {
                         //濡傛灉瀛樺湪锛屽垯灏� result 閲岀殑杩欎釜闂鎵�瀵瑰簲鐨� Targetvalue=value 杩欐潯鏁版嵁鏇存柊鎴愬綋鍓嶈繖鏉℃暟鎹�
-                        if(value.equals(export.getOptionresult())) {
+                        if (value.equals(export.getOptionresult())) {
                             existingExport.setRatio(export.getRatio());
                             existingExport.setScore(export.getScore());
                             existingExport.setCount(export.getCount());
@@ -5813,11 +5846,11 @@
         if (StringUtils.isNotEmpty(questionResultVO.getServiceType()) && questionResultVO.getServiceType().equals("2")) {
             //鑾峰彇serviceSubtaskList涓殑鎵�鏈塼askid
             List<Long> taskIds = serviceSubtaskRes.stream().map(ServiceSubtaskRes::getTaskid).filter(ObjectUtils::isNotEmpty).distinct().collect(Collectors.toList());
-            serviceSubtaskDetailRatioExports = statQuestionOption(taskIds, questionResultVO.getStartOutHospTime(), questionResultVO.getEndOutHospTime(), questionResultVO.getQuestionContent(), questionResultVO.getStartScore(), questionResultVO.getEndScore(),questionResultVO.getValueType());
+            serviceSubtaskDetailRatioExports = statQuestionOption(taskIds, questionResultVO.getStartOutHospTime(), questionResultVO.getEndOutHospTime(), questionResultVO.getQuestionContent(), questionResultVO.getStartScore(), questionResultVO.getEndScore(), questionResultVO.getValueType());
         } else if (StringUtils.isNotEmpty(questionResultVO.getServiceType()) && questionResultVO.getServiceType().equals("6")) {
             //婊℃剰搴︾粺璁� 锛堥�氳繃 subtask 鐨� id 鍘荤粺璁★級
             List<Long> subtaskIds = serviceSubtaskRes.stream().map(ServiceSubtaskRes::getId).collect(Collectors.toList());
-            serviceSubtaskDetailRatioExports = statQuestionOptionBySubtaskIds(subtaskIds, questionResultVO.getStartOutHospTime(), questionResultVO.getEndOutHospTime(), questionResultVO.getQuestionContent(), questionResultVO.getStartScore(), questionResultVO.getEndScore(),questionResultVO.getValueType());
+            serviceSubtaskDetailRatioExports = statQuestionOptionBySubtaskIds(subtaskIds, questionResultVO.getStartOutHospTime(), questionResultVO.getEndOutHospTime(), questionResultVO.getQuestionContent(), questionResultVO.getStartScore(), questionResultVO.getEndScore(), questionResultVO.getValueType());
         }
         return serviceSubtaskDetailRatioExports;
     }

--
Gitblit v1.9.3