From 2013ea208bc8fa12fb6f8d22497f2a8b5f69855f Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期五, 11 九月 2026 11:18:30 +0800
Subject: [PATCH] 1.省立同德的满意度功能处理 2.省立同德、南华采集时间缩短 3.给保存问卷接口,加一下防止重复提前的注解@RepeatSubmit 4.省立同德新增“报备科室责任人”字段 5.登陆接口加“用户类型”字段,不影响当前登陆逻辑

---
 smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java |  200 ++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 169 insertions(+), 31 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 06ffc4c..ad85650 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
@@ -22,9 +22,11 @@
 import com.smartor.common.MtSubmitSmUtil;
 import com.smartor.common.ScheduleSubtaskBuilder;
 import com.smartor.config.PhoneUtils;
+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.entity.ServiceSubtaskEntity;
@@ -36,6 +38,7 @@
 import org.apache.commons.lang3.ObjectUtils;
 import org.checkerframework.checker.nullness.qual.NonNull;
 import org.junit.Test;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.cache.annotation.Cacheable;
@@ -414,26 +417,7 @@
 
     @Override
     public List<ServiceSubtaskRes> patItem(ServiceSubtaskEntity serviceSubtaskEntity) {
-        if (serviceSubtaskEntity.getSendstateView() != null) {
-            //            1锛氬緟闅忚锛�1 琚鍙栥��2 寰呭彂閫併��3 宸插彂閫併��5 鍙戦�佸け璐ャ��7銆佽秴鏃讹級锛�2锛氬凡瀹屾垚锛� 6 宸插畬鎴愶級銆�3锛氭棤闇�闅忚锛�4 涓嶆墽琛岋級
-            if (serviceSubtaskEntity.getSendstateView() == 1)
-                serviceSubtaskEntity.setSendstates(new ArrayList<>(Arrays.asList(1L, 2L, 3L, 5L, 7L)));
-            if (serviceSubtaskEntity.getSendstateView() == 2)
-                serviceSubtaskEntity.setSendstates(new ArrayList<>(Arrays.asList(6L)));
-            if (serviceSubtaskEntity.getSendstateView() == 3)
-                serviceSubtaskEntity.setSendstates(new ArrayList<>(Arrays.asList(4L)));
-        }
-        //鎮h�呰幏鍙栭殢璁夸换鍔�-闇�瑕佹煡璇㈠悓涓偅鑰咃紙韬唤璇侊級鎵�鏈夌殑浠诲姟 鏅畞
-        if (StringUtils.isNotEmpty(serviceSubtaskEntity.getOrgid()) && serviceSubtaskEntity.getOrgid().equals("47255004333112711A1001")) {
-            if (ObjectUtils.isNotEmpty(serviceSubtaskEntity.getPatid())) {
-                PatArchive patArchive = patArchiveService.selectPatArchiveByPatid(serviceSubtaskEntity.getPatid());
-                if (ObjectUtils.isNotEmpty(patArchive) && StringUtils.isNotEmpty(patArchive.getIdcardno())) {
-                    serviceSubtaskEntity.setPatid(null);
-                    serviceSubtaskEntity.setSfzh(patArchive.getIdcardno());
-                }
-            }
-        }
-        List<ServiceSubtask> selectServiceSubtaskList = this.selectServiceSubtaskList(serviceSubtaskEntity);
+        List<ServiceSubtask> selectServiceSubtaskList = getServiceSubtasks(serviceSubtaskEntity);
 
         List<ServiceSubtaskRes> serviceSubtaskResList = new ArrayList<>();
         for (ServiceSubtask serviceSubtask : selectServiceSubtaskList) {
@@ -469,6 +453,30 @@
             serviceSubtaskResList.add(serviceSubtaskRes);
         }
         return serviceSubtaskResList;
+    }
+
+    public List<ServiceSubtask> getServiceSubtasks(ServiceSubtaskEntity serviceSubtaskEntity) {
+        if (serviceSubtaskEntity.getSendstateView() != null) {
+            //            1锛氬緟闅忚锛�1 琚鍙栥��2 寰呭彂閫併��3 宸插彂閫併��5 鍙戦�佸け璐ャ��7銆佽秴鏃讹級锛�2锛氬凡瀹屾垚锛� 6 宸插畬鎴愶級銆�3锛氭棤闇�闅忚锛�4 涓嶆墽琛岋級
+            if (serviceSubtaskEntity.getSendstateView() == 1)
+                serviceSubtaskEntity.setSendstates(new ArrayList<>(Arrays.asList(1L, 2L, 3L, 5L, 7L)));
+            if (serviceSubtaskEntity.getSendstateView() == 2)
+                serviceSubtaskEntity.setSendstates(new ArrayList<>(Arrays.asList(6L)));
+            if (serviceSubtaskEntity.getSendstateView() == 3)
+                serviceSubtaskEntity.setSendstates(new ArrayList<>(Arrays.asList(4L)));
+        }
+        //鎮h�呰幏鍙栭殢璁夸换鍔�-闇�瑕佹煡璇㈠悓涓偅鑰咃紙韬唤璇侊級鎵�鏈夌殑浠诲姟 鏅畞
+        if (StringUtils.isNotEmpty(serviceSubtaskEntity.getOrgid()) && serviceSubtaskEntity.getOrgid().equals("47255004333112711A1001")) {
+            if (ObjectUtils.isNotEmpty(serviceSubtaskEntity.getPatid())) {
+                PatArchive patArchive = patArchiveService.selectPatArchiveByPatid(serviceSubtaskEntity.getPatid());
+                if (ObjectUtils.isNotEmpty(patArchive) && StringUtils.isNotEmpty(patArchive.getIdcardno())) {
+                    serviceSubtaskEntity.setPatid(null);
+                    serviceSubtaskEntity.setSfzh(patArchive.getIdcardno());
+                }
+            }
+        }
+        List<ServiceSubtask> selectServiceSubtaskList = this.selectServiceSubtaskList(serviceSubtaskEntity);
+        return selectServiceSubtaskList;
     }
 
     @Override
@@ -636,14 +644,19 @@
      */
     @Override
     public Map<String, Object> insertServiceSubtask(ServiceSubtask serviceSubtask) {
+        List<ServiceSubtask> serviceSubtasks = null;
         //鍏堟煡璇竴涓嬭鎮h�呮槸鍚﹀凡缁忓垱寤烘牴鎹畇erviceType,sendstate,inhospid,patid,orgid
-        ServiceSubtaskEntity serviceSubtaskVO = new ServiceSubtaskEntity();
-        serviceSubtaskVO.setServiceType(serviceSubtask.getServiceType());
-        serviceSubtaskVO.setSendstates(new ArrayList<>(Arrays.asList(1L, 2L, 3L, 5L, 7L)));
-        serviceSubtaskVO.setPatid(serviceSubtask.getPatid());
-        serviceSubtaskVO.setOrgid(serviceSubtask.getOrgid());
-        serviceSubtaskVO.setCampusid(serviceSubtask.getCampusid());
-        List<ServiceSubtask> serviceSubtasks = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO);
+        //杩欐牱鍒ゆ柇涓昏鏄负浜嗘兂璁╂柊鍗庡尰闄㈢殑澶栭儴瀵煎叆鎮h�呭垱寤轰换鍔★紝涔熻兘鐢ㄨ繖涓帴鍙�
+        if (StringUtils.isEmpty(serviceSubtask.getPatfrom()) || !serviceSubtask.getPatfrom().equals("2")) {
+            ServiceSubtaskEntity serviceSubtaskVO = new ServiceSubtaskEntity();
+            serviceSubtaskVO.setServiceType(serviceSubtask.getServiceType());
+            serviceSubtaskVO.setInhospid(serviceSubtask.getInhospid());
+            serviceSubtaskVO.setSendstates(new ArrayList<>(Arrays.asList(1L, 2L, 3L, 5L, 7L)));
+            serviceSubtaskVO.setPatid(serviceSubtask.getPatid());
+            serviceSubtaskVO.setOrgid(serviceSubtask.getOrgid());
+            serviceSubtaskVO.setCampusid(serviceSubtask.getCampusid());
+            serviceSubtasks = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO);
+        }
         RSAPublicKeyExample rsaPublicKeyExample = new RSAPublicKeyExample();
         String format = null;
         if (CollectionUtils.isNotEmpty(serviceSubtasks)) {
@@ -657,8 +670,27 @@
             serviceSubtask = serviceSubtask1;
         } else {
             //濡傛灉涓嶅瓨鍦紝鍒欐柊澧�
+            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());
+            }
+
             serviceSubtask.setCreateTime(DateUtils.getNowDate());
             serviceSubtaskMapper.insertServiceSubtask(serviceSubtask);
+            //淇敼浣忛櫌婊℃剰搴︾姸鎬侊紙閬垮厤閲嶅鏌ヨ锛�
+            if (serviceSubtask.getServiceType() != null && "6".equals(serviceSubtask.getServiceType())) {
+                Long inhospid = serviceSubtask.getInhospid();
+                if (inhospid != null) {
+                    PatMedInhosp patMedInhosp = new PatMedInhosp();
+                    patMedInhosp.setInhospMydFlag("1");
+                    patMedInhosp.setInhospid(inhospid);
+                    patMedInhospMapper.updatePatMedInhosp(patMedInhosp);
+                }
+            }
             format = getOutPath(serviceSubtask, rsaPublicKeyExample);
         }
 
@@ -4980,23 +5012,107 @@
     }
 
     @Override
-    public List<ServiceSubtaskDetailRatioExport> statQuestionOption(List<Long> taskIds, Date startOutHospTime, Date endOutHospTime) {
+    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)) {
             serviceSubtaskDetailMapper.deleteRepeatDetailByIds(repeatIds);
         }
-        return serviceSubtaskMapper.statQuestionOption(taskIds, startOutHospTime, endOutHospTime);
+        List<ServiceSubtaskDetailRatioExport> serviceSubtaskDetailRatioExports = serviceSubtaskMapper.statQuestionOption(taskIds, startOutHospTime, endOutHospTime, scoreStart, scoreEnd, scriptContent, valueType);
+
+        // 澶勭悊 targetvalue锛氭寜 & 鍒嗗壊鎴愬鏉¤褰�
+        List<ServiceSubtaskDetailRatioExport> result = new ArrayList<>();
+        for (ServiceSubtaskDetailRatioExport export : serviceSubtaskDetailRatioExports) {
+            if (StringUtils.isNotEmpty(export.getTargetvalue()) && export.getTargetvalue().contains("&")) {
+                String[] values = export.getTargetvalue().split("&");
+                // 濡傛灉鏈夊鏉$洰鏍囧�硷紝鎷嗗垎鎴愬琛�
+                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);
+                    if (existingExport != null && existingExport.getRatio().equals("0") && existingExport.getCount().equals("0")) {
+                        //濡傛灉瀛樺湪锛屽垯灏� result 閲岀殑杩欎釜闂鎵�瀵瑰簲鐨� Targetvalue=value 杩欐潯鏁版嵁鏇存柊鎴愬綋鍓嶈繖鏉℃暟鎹�
+                        if(value.equals(export.getOptionresult())) {
+                            existingExport.setRatio(export.getRatio());
+                            existingExport.setScore(export.getScore());
+                            existingExport.setCount(export.getCount());
+                            existingExport.setOptionresult(export.getOptionresult());
+                        }
+                    } else if (existingExport != null && !existingExport.getRatio().equals("0")) {
+                        continue;
+                    } else {
+                        ServiceSubtaskDetailRatioExport newExport = DtoConversionUtils.sourceToTarget(export, ServiceSubtaskDetailRatioExport.class);
+                        newExport.setTargetvalue(value.trim()); // targetvalue 鏄剧ず鍗曚釜閫夐」
+                        if (!value.equals(export.getOptionresult())) {
+                            newExport.setOptionresult(null);
+                            newExport.setCount("0");
+                            newExport.setRatio("0");
+                        }
+                        result.add(newExport);
+                    }
+                }
+            } else {
+                // targetvalue 涓嶅寘鍚� &锛岀洿鎺ユ坊鍔犲埌缁撴灉
+                result.add(export);
+            }
+        }
+
+        return result;
     }
 
     @Override
-    public List<ServiceSubtaskDetailRatioExport> statQuestionOptionBySubtaskIds(List<Long> subtaskIds, Date startOutHospTime, Date endOutHospTime) {
+    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);
         }
-        return serviceSubtaskMapper.statQuestionOptionBySubtaskIds(subtaskIds, startOutHospTime, endOutHospTime);
+
+        List<ServiceSubtaskDetailRatioExport> serviceSubtaskDetailRatioExports = serviceSubtaskMapper.statQuestionOptionBySubtaskIds(subtaskIds, startOutHospTime, endOutHospTime, scoreStart, scoreEnd, scriptContent,valueType);
+        // 澶勭悊 targetvalue锛氭寜 & 鍒嗗壊鎴愬鏉¤褰�
+        List<ServiceSubtaskDetailRatioExport> result = new ArrayList<>();
+        for (ServiceSubtaskDetailRatioExport export : serviceSubtaskDetailRatioExports) {
+            if (StringUtils.isNotEmpty(export.getTargetvalue()) && export.getTargetvalue().contains("&")) {
+                String[] values = export.getTargetvalue().split("&");
+                // 濡傛灉鏈夊鏉$洰鏍囧�硷紝鎷嗗垎鎴愬琛�
+                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);
+                    if (existingExport != null && existingExport.getRatio().equals("0") && existingExport.getCount().equals("0")) {
+                        //濡傛灉瀛樺湪锛屽垯灏� result 閲岀殑杩欎釜闂鎵�瀵瑰簲鐨� Targetvalue=value 杩欐潯鏁版嵁鏇存柊鎴愬綋鍓嶈繖鏉℃暟鎹�
+                        if(value.equals(export.getOptionresult())) {
+                            existingExport.setRatio(export.getRatio());
+                            existingExport.setScore(export.getScore());
+                            existingExport.setCount(export.getCount());
+                            existingExport.setOptionresult(export.getOptionresult());
+                        }
+                    } else if (existingExport != null && !existingExport.getRatio().equals("0")) {
+                        continue;
+                    } else {
+                        ServiceSubtaskDetailRatioExport newExport = DtoConversionUtils.sourceToTarget(export, ServiceSubtaskDetailRatioExport.class);
+                        newExport.setTargetvalue(value.trim()); // targetvalue 鏄剧ず鍗曚釜閫夐」
+                        if (!value.equals(export.getOptionresult())) {
+                            newExport.setOptionresult(null);
+                            newExport.setCount("0");
+                            newExport.setRatio("0");
+                        }
+                        result.add(newExport);
+                    }
+                }
+            } else {
+                // targetvalue 涓嶅寘鍚� &锛岀洿鎺ユ坊鍔犲埌缁撴灉
+                result.add(export);
+            }
+        }
+
+        return result;
     }
 
     /**
@@ -5684,6 +5800,28 @@
         return back;
     }
 
+
+    /**
+     * 闂缁撴灉鍗犳瘮
+     *
+     * @param serviceSubtaskEntity
+     * @param serviceSubtaskRes
+     * @return
+     */
+    public List<ServiceSubtaskDetailRatioExport> getDetailRatio(QuestionResultVO questionResultVO, List<ServiceSubtaskRes> serviceSubtaskRes) {
+        List<ServiceSubtaskDetailRatioExport> serviceSubtaskDetailRatioExports = null;
+        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());
+        } 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());
+        }
+        return serviceSubtaskDetailRatioExports;
+    }
+
     //鑾峰彇浠诲姟缁勪俊鎭�
     private void findServiceTaskScheduleVO(ServiceTaskVO serviceTaskVO) {
         if (StringUtils.isNotEmpty(serviceTaskVO.getAppltype()) && serviceTaskVO.getAppltype().equals("5")) {

--
Gitblit v1.9.3