From 27700927ebef0dbe669433ec2cdd3170647c226a Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期五, 10 四月 2026 18:05:40 +0800
Subject: [PATCH] Merge branch 'master' into master-手术随访

---
 smartor/src/main/java/com/smartor/service/IServiceSubtaskRecordService.java              |    5 +
 smartor/src/main/resources/mapper/smartor/ServiceSubtaskDetailTraceMapper.xml            |    5 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java |  108 +++++++++++++++-----------
 ruoyi-admin/src/main/resources/application-druid.yml                                     |    2 
 smartor/src/main/java/com/smartor/mapper/ServiceSubtaskRecordMapper.java                 |    5 +
 smartor/src/main/resources/mapper/smartor/ServiceSubtaskRecordMapper.xml                 |    8 ++
 smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java      |   75 +++++++++++-------
 smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml                       |    3 
 ruoyi-admin/src/main/resources/application-ls.yml                                        |    2 
 smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskRecordServiceImpl.java      |   12 +++
 10 files changed, 144 insertions(+), 81 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java
index f0d78ce..67406f3 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java
@@ -96,12 +96,6 @@
     @ApiOperation("鏌ヨ鎮h�呴殢璁夸俊鎭�")
     @PostMapping("/patItem")
     public Map<String, Object> patItem(@RequestBody ServiceSubtaskVO serviceSubtaskVO) {
-//        if (serviceSubtaskVO.getLeavehospitaldistrictcodes() != null && serviceSubtaskVO.getLeavehospitaldistrictcodes().size() > 10) {
-//            throw new BaseException("鐥呭尯鏌ヨ鏁伴噺涓嶈兘瓒呰繃10涓�");
-//        }
-//        if (serviceSubtaskVO.getLeaveldeptcodes() != null && serviceSubtaskVO.getLeaveldeptcodes().size() > 10) {
-//            throw new BaseException("绉戝鏌ヨ鏁伴噺涓嶈兘瓒呰繃10涓�");
-//        }
 
         serviceSubtaskVO.setPageNum(PageUtils.getOffset(serviceSubtaskVO.getPageNum(), serviceSubtaskVO.getPageSize()));
         List<ServiceSubtaskRes> serviceSubtaskList = null;
@@ -114,29 +108,42 @@
             serviceSubtaskEntity.setContinueContent(ObjectUtils.isNotEmpty(serviceSubtaskVO.getContinueContent()) ? serviceSubtaskVO.getContinueContent().toString() : null);
             serviceSubtaskList = serviceSubtaskService.patItem(serviceSubtaskEntity);
         }
-        for (ServiceSubtaskRes serviceSubtask : serviceSubtaskList) {
-            ServiceSubtaskRecord serviceSubtaskRecord = new ServiceSubtaskRecord();
-            serviceSubtaskRecord.setSubtaskId(serviceSubtask.getId());
-            serviceSubtaskRecord.setOrgid(serviceSubtask.getOrgid());
-            if (ObjectUtils.isNotEmpty((serviceSubtask.getTaskid())))
-                serviceSubtaskRecord.setTaskid(serviceSubtask.getTaskid().toString());
-            serviceSubtask.setServiceSubtaskRecordList(serviceSubtaskRecordService.selectServiceSubtaskRecordList(serviceSubtaskRecord));
 
-            ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
-            if (ObjectUtils.isNotEmpty(serviceTask)) serviceSubtask.setPreachform(serviceTask.getPreachform());
+        // 鎵归噺鏌� subtask_record锛�1娆QL鏇夸唬寰幆涓璑娆″崟鐙煡
+        List<Long> subtaskIds = serviceSubtaskList.stream().map(ServiceSubtaskRes::getId).filter(ObjectUtils::isNotEmpty).collect(Collectors.toList());
+        Map<Long, List<ServiceSubtaskRecord>> recordMap = serviceSubtaskRecordService.selectRecordMapBySubtaskIds(subtaskIds);
+
+        for (ServiceSubtaskRes serviceSubtask : serviceSubtaskList) {
+            serviceSubtask.setServiceSubtaskRecordList(recordMap.getOrDefault(serviceSubtask.getId(), new ArrayList<>()));
         }
 
-//      patItemCount 璋冪敤redisCache璁板綍缁熻鏁版嵁
-        Map<String, Object> map = serviceSubtaskService.patItemCount(serviceSubtaskEntity);
+//      patItemCount 璧癛edis缂撳瓨鐗堬紝閬垮厤姣忔鍏ㄨ〃鑱氬悎鎵弿
+        Map<String, Object> map = getPatItemCountWithCache(serviceSubtaskEntity);
         map.put("serviceSubtaskList", serviceSubtaskList);
         List<Map<String, Object>> list = new ArrayList<>();
         list.add(map);
 
-        serviceSubtaskEntity.setPageNum(null);
-        serviceSubtaskEntity.setPageSize(null);
-        List<ServiceSubtaskRes> serviceSubtasks = serviceSubtaskService.patItem(serviceSubtaskEntity);
+        // 鐩存帴浠庡凡鏈夎仛鍚堢粨鏋滄帹绠梩otal锛岄伩鍏嶅幓鎺夊垎椤靛悗鍐嶅叏閲忔煡涓�閬嶅ぇ琛�
+        long total = 0L;
+        try {
+            long wzx = map.get("wzx") != null ? ((Number) map.get("wzx")).longValue() : 0L;
+            long ysf = map.get("ysf") != null ? ((Number) map.get("ysf")).longValue() : 0L;
+            long dsf = map.get("dsf") != null ? ((Number) map.get("dsf")).longValue() : 0L;
+            long yc = map.get("yc") != null ? ((Number) map.get("yc")).longValue() : 0L;
+            long jg = map.get("jg") != null ? ((Number) map.get("jg")).longValue() : 0L;
+            long fssb = map.get("fssb") != null ? ((Number) map.get("fssb")).longValue() : 0L;
+            long yfs = map.get("yfs") != null ? ((Number) map.get("yfs")).longValue() : 0L;
+            long blq = map.get("blq") != null ? ((Number) map.get("blq")).longValue() : 0L;
+            total = wzx + ysf + dsf + yc + jg + fssb + yfs + blq;
+        } catch (Exception e) {
+            // 鍏滃簳锛氬叏閲廲ount
+            serviceSubtaskEntity.setPageNum(null);
+            serviceSubtaskEntity.setPageSize(null);
+            List<ServiceSubtask> serviceSubtasks = serviceSubtaskService.selectServiceSubtaskList(serviceSubtaskEntity);
+            total = CollectionUtils.isNotEmpty(serviceSubtasks) ? serviceSubtasks.size() : 0L;
+        }
 
-        return getDataTable3(CollectionUtils.isNotEmpty(serviceSubtasks) ? serviceSubtasks.size() : 0L, list);
+        return getDataTable3(total, list);
     }
 
     /**
@@ -151,42 +158,48 @@
         ServiceSubtaskEntity serviceSubtaskEntity = DtoConversionUtils.sourceToTarget(serviceSubtaskVO, ServiceSubtaskEntity.class);
         serviceSubtaskEntity.setContinueContent(ObjectUtils.isNotEmpty(serviceSubtaskVO.getContinueContent()) ? serviceSubtaskVO.getContinueContent().toString() : null);
 
-        // 閫氳繃redis璁板綍缁撴灉
-        Map<String, Object> redisMap = new HashMap<>();
         LoginUser loginUser = getLoginUser();
-        SysUser user = null;
         Long userId = null;
-        if (ObjectUtils.isNotEmpty(loginUser)) {
-            user = loginUser.getUser();
-            if (ObjectUtils.isNotEmpty(user)) {
-                userId = user.getUserId();
-            }
+        if (ObjectUtils.isNotEmpty(loginUser) && ObjectUtils.isNotEmpty(loginUser.getUser())) {
+            userId = loginUser.getUser().getUserId();
         }
         if (ObjectUtils.isNotEmpty(userId)) {
-            redisMap = redisCache.getCacheObject(userId + "patItemCount");
-            //璁板綍鏄惁鏈夊彲鐢ㄧ紦瀛�
+            map = getPatItemCountWithCache(serviceSubtaskEntity);
+        }
+
+        map.put("code", HttpStatus.SUCCESS);
+        return map;
+    }
+
+    /**
+     * 甯edis缂撳瓨鐨勭粺璁℃煡璇紝渚沺atItem鍜宲atItemCount鍏辩敤锛屾潯浠朵笉鍙樻椂鐩存帴鍛戒腑缂撳瓨
+     */
+    private Map<String, Object> getPatItemCountWithCache(ServiceSubtaskEntity serviceSubtaskEntity) {
+        Map<String, Object> map = new HashMap<>();
+        LoginUser loginUser = getLoginUser();
+        Long userId = null;
+        if (ObjectUtils.isNotEmpty(loginUser) && ObjectUtils.isNotEmpty(loginUser.getUser())) {
+            userId = loginUser.getUser().getUserId();
+        }
+        if (ObjectUtils.isNotEmpty(userId)) {
+            Map<String, Object> redisMap = redisCache.getCacheObject(userId + "patItemCount");
             Boolean redisFlag = false;
-            ServiceSubtaskEntity oldCondition = null;
             if (MapUtils.isNotEmpty(redisMap)) {
-                oldCondition = (ServiceSubtaskEntity) redisMap.get("searchCondition");
-                // 姣旇緝鏌ヨ鏉′欢鏄惁涓�鑷�
+                ServiceSubtaskEntity oldCondition = (ServiceSubtaskEntity) redisMap.get("searchCondition");
                 if (ObjectUtils.isNotEmpty(oldCondition) && isSameCondition(oldCondition, serviceSubtaskEntity)) {
-                    // 鏉′欢涓�鑷达紝浣跨敤缂撳瓨
                     redisFlag = true;
                     map = redisMap;
                     redisCache.setCacheObject(userId + "patItemCount", map, 120, TimeUnit.MINUTES);
                 }
             }
-
-            // 濡傛灉娌℃湁缂撳瓨鎴栬�呮潯浠朵笉涓�鑷达紝閲嶆柊鏌ヨ
             if (!redisFlag) {
                 map = serviceSubtaskService.patItemCount(serviceSubtaskEntity);
                 map.put("searchCondition", serviceSubtaskEntity);
                 redisCache.setCacheObject(userId + "patItemCount", map, 120, TimeUnit.MINUTES);
             }
+        } else {
+            map = serviceSubtaskService.patItemCount(serviceSubtaskEntity);
         }
-
-        map.put("code", HttpStatus.SUCCESS);
         return map;
     }
 
@@ -659,11 +672,12 @@
 
     /**
      * 缁熻浠诲姟鍚勭鐘舵�佺殑鏁伴噺锛堜紭鍖栫増锛�
+     *
      * @return Map<String, Object> 鍖呭惈鍚勭姸鎬佺粺璁℃暟鎹�
-     *         pendingVisitCount: 褰撳墠鐧诲綍浜烘埅姝粖鏃ュ緟闅忚鎬婚噺
-     *         failedVisitCount: 褰撳墠鐧诲綍浜洪殢璁夸换鍔″け璐ユ�婚噺
-     *         abnormalVisitVount: 褰撳墠鐧诲綍浜洪殢璁夸换鍔″紓甯告�婚噺
-     *         allVisitCount: 褰撳墠鐧诲綍浜洪殢璁夸换鍔℃�婚噺
+     * pendingVisitCount: 褰撳墠鐧诲綍浜烘埅姝粖鏃ュ緟闅忚鎬婚噺
+     * failedVisitCount: 褰撳墠鐧诲綍浜洪殢璁夸换鍔″け璐ユ�婚噺
+     * abnormalVisitVount: 褰撳墠鐧诲綍浜洪殢璁夸换鍔″紓甯告�婚噺
+     * allVisitCount: 褰撳墠鐧诲綍浜洪殢璁夸换鍔℃�婚噺
      */
     @ApiOperation("鑾峰彇褰撳墠鐢ㄦ埛闅忚鏁伴噺缁熻")
     @PostMapping("/getCurrentUserServiceSubtaskCount")
@@ -687,12 +701,12 @@
         entity.setOrgid(sysUser.getOrgid());
         entity.setLeaveldeptcodes(deptCodes);
         entity.setLeavehospitaldistrictcodes(wardCodes);
-        if(ObjectUtils.isNotEmpty(sysUser)){
-            if(!("admin").equals(sysUser.getUserName())){
-                if(ObjectUtils.isNotEmpty(sysUserWards) && ObjectUtils.isNotEmpty(sysUserDepts)){
+        if (ObjectUtils.isNotEmpty(sysUser)) {
+            if (!("admin").equals(sysUser.getUserName())) {
+                if (ObjectUtils.isNotEmpty(sysUserWards) && ObjectUtils.isNotEmpty(sysUserDepts)) {
                     map = serviceSubtaskService.getCurrentUserServiceSubtaskCount(entity);
                 }
-            }else {
+            } else {
                 map = serviceSubtaskService.getCurrentUserServiceSubtaskCount(entity);
             }
         }
diff --git a/ruoyi-admin/src/main/resources/application-druid.yml b/ruoyi-admin/src/main/resources/application-druid.yml
index 1c9eda3..3669f6b 100644
--- a/ruoyi-admin/src/main/resources/application-druid.yml
+++ b/ruoyi-admin/src/main/resources/application-druid.yml
@@ -118,7 +118,7 @@
     database: 0
     password: Smartor
     # 杩炴帴瓒呮椂鏃堕棿
-    timeout: 10s
+    timeout: 30s
     lettuce:
       pool:
         # 杩炴帴姹犱腑鐨勬渶灏忕┖闂茶繛鎺�
diff --git a/ruoyi-admin/src/main/resources/application-ls.yml b/ruoyi-admin/src/main/resources/application-ls.yml
index 5ae1f44..5c3fb84 100644
--- a/ruoyi-admin/src/main/resources/application-ls.yml
+++ b/ruoyi-admin/src/main/resources/application-ls.yml
@@ -92,7 +92,7 @@
     # 瀵嗙爜
     password: Smartor
     # 杩炴帴瓒呮椂鏃堕棿
-    timeout: 10s
+    timeout: 30s
     lettuce:
       pool:
         # 杩炴帴姹犱腑鐨勬渶灏忕┖闂茶繛鎺�
diff --git a/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskRecordMapper.java b/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskRecordMapper.java
index 20ca630..27274b0 100644
--- a/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskRecordMapper.java
+++ b/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskRecordMapper.java
@@ -30,6 +30,11 @@
     public List<ServiceSubtaskRecord> selectServiceSubtaskRecordList(ServiceSubtaskRecord serviceSubtaskRecord);
 
     /**
+     * 鎸� subtask_id 鍒楄〃鎵归噺鏌ヨ闅忚璁板綍锛屾秷闄+1
+     */
+    public List<ServiceSubtaskRecord> selectServiceSubtaskRecordBySubtaskIds(List<Long> subtaskIds);
+
+    /**
      * 鏂板銆愯濉啓鍔熻兘鍚嶇О銆�
      *
      * @param serviceSubtaskRecord 銆愯濉啓鍔熻兘鍚嶇О銆�
diff --git a/smartor/src/main/java/com/smartor/service/IServiceSubtaskRecordService.java b/smartor/src/main/java/com/smartor/service/IServiceSubtaskRecordService.java
index 40ebf08..3250aef 100644
--- a/smartor/src/main/java/com/smartor/service/IServiceSubtaskRecordService.java
+++ b/smartor/src/main/java/com/smartor/service/IServiceSubtaskRecordService.java
@@ -29,6 +29,11 @@
     public List<ServiceSubtaskRecord> selectServiceSubtaskRecordList(ServiceSubtaskRecord serviceSubtaskRecord);
 
     /**
+     * 鎸� subtask_id 鍒楄〃鎵归噺鏌ヨ锛岀粨鏋滅敤 Map<subtaskId, records> 缁撴瀯杩斿洖
+     */
+    public java.util.Map<Long, List<ServiceSubtaskRecord>> selectRecordMapBySubtaskIds(List<Long> subtaskIds);
+
+    /**
      * 鏂板銆愯濉啓鍔熻兘鍚嶇О銆�
      *
      * @param serviceSubtaskRecord 銆愯濉啓鍔熻兘鍚嶇О銆�
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java
index 742e7f7..dc66c55 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java
@@ -202,7 +202,7 @@
                                 //璇存槑鏄涓�棰�
                                 List<SvyTaskTemplateTargetoption> svyTaskTemplateTargetoptions = cacheList.get(0).getSvyTaskTemplateTargetoptions();
                                 svyTaskTemplateScriptVO.setSvyTaskTemplateTargetoptions(svyTaskTemplateTargetoptions);
-                                Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, tid, pid);
+                                Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, tid, pid, null);
                                 if (map == null) continue aa;
                                 if (!Objects.isNull(map.get("nextScriptNo")))
                                     nextScriptno = Long.valueOf(map.get("nextScriptNo"));
@@ -224,7 +224,7 @@
 
                         if (svyTaskTemplateScriptVO.getSort() != null && svyTaskTemplateScriptVO.getSort().equals(nextScriptno)) {
 //                            log.error("svyTaskTemplateScriptVO鐨勫�间负锛歿}", svyTaskTemplateScriptVO);
-                            Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, Long.valueOf(split[1]), Long.valueOf(split[0]));
+                            Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, Long.valueOf(split[1]), Long.valueOf(split[0]), null);
                             log.error("nextScriptNo鐨勪俊鎭负锛歿}", map.get("nextScriptNo"));
                             if (!Objects.isNull(map.get("nextScriptNo")))
                                 nextScriptno = Long.valueOf(map.get("nextScriptNo"));
@@ -250,7 +250,7 @@
                                 List<IvrTaskTemplateTargetoption> ivrTaskTemplateTargetoptions = cacheList.get(0).getIvrTaskScriptTargetoptionList();
 //                                List<IvrTaskTemplateTargetoption> ivrTaskTemplateTargetoptions = DtoConversionUtils.sourceToTarget(ivrLibaTemplateTargetoptions, IvrTaskTemplateTargetoption.class);
                                 ivrTaskTemplateScriptVO.setIvrTaskScriptTargetoptionList(ivrTaskTemplateTargetoptions);
-                                Map<String, String> map = setSFInfo(ivrTaskTemplateScriptVO, tid, pid);
+                                Map<String, String> map = setSFInfo(ivrTaskTemplateScriptVO, tid, pid, null);
                                 if (!Objects.isNull(map.get("nextScriptNo")))
                                     nextScriptno = Long.valueOf(map.get("nextScriptNo"));
                                 if (score == null) {
@@ -267,7 +267,7 @@
                         ivrTaskTemplateScriptVO.setIvrTaskScriptTargetoptionList(ivrTaskTemplateTargetoptions);
 
                         if (ivrTaskTemplateScriptVO.getSort() != null && Long.valueOf(ivrTaskTemplateScriptVO.getSort()).equals(nextScriptno)) {
-                            Map<String, String> map = setSFInfo(ivrTaskTemplateScriptVO, Long.valueOf(split[1]), Long.valueOf(split[0]));
+                            Map<String, String> map = setSFInfo(ivrTaskTemplateScriptVO, Long.valueOf(split[1]), Long.valueOf(split[0]), null);
                             log.error("----nextScriptNo2鐨勪俊鎭负锛歿}", map.get("nextScriptNo"));
                             if (!Objects.isNull(map.get("nextScriptNo")))
                                 nextScriptno = Long.valueOf(map.get("nextScriptNo"));
@@ -325,6 +325,7 @@
     public Integer saveQuestionDetail(ServiceSubTaskCacheReq serviceSubTaskCacheReq, Long flag) {
         Long tid = Long.valueOf(serviceSubTaskCacheReq.getParam1());
         Long pid = Long.valueOf(serviceSubTaskCacheReq.getParam2());
+        Long subid = Long.valueOf(serviceSubTaskCacheReq.getParam6());
         Double score = null;
         if (ObjectUtils.isNotEmpty(serviceSubTaskCacheReq)) {
             Long nextScriptno = null;
@@ -341,7 +342,7 @@
                                 //璇存槑鏄涓�棰�
                                 List<SvyTaskTemplateTargetoption> svyTaskTemplateTargetoptions = cacheList.get(0).getSvyTaskTemplateTargetoptions();
                                 svyTaskTemplateScriptVO.setSvyTaskTemplateTargetoptions(svyTaskTemplateTargetoptions);
-                                Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, tid, pid);
+                                Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, tid, pid, subid);
                                 if (map == null) continue;
                                 if (!Objects.isNull(map.get("nextScriptNo")))
                                     nextScriptno = Long.valueOf(map.get("nextScriptNo"));
@@ -361,7 +362,7 @@
                         svyTaskTemplateScriptVO.setSvyTaskTemplateTargetoptions(svyTaskTemplateTargetoptions);
 
                         if (svyTaskTemplateScriptVO.getSort() != null && svyTaskTemplateScriptVO.getSort().equals(nextScriptno)) {
-                            Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, tid, pid);
+                            Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, tid, pid, subid);
                             log.error("nextScriptNo鐨勪俊鎭负锛歿}", map.get("nextScriptNo"));
                             if (!Objects.isNull(map.get("nextScriptNo")))
                                 nextScriptno = Long.valueOf(map.get("nextScriptNo"));
@@ -376,19 +377,21 @@
                 }
             } else if (serviceSubTaskCacheReq.getType() == 1) {
                 List<IvrTaskTemplateScriptVO> cacheList = serviceSubTaskCacheReq.getIvrTaskTemplateScriptVOList();
-                cacheList.sort(Comparator.comparingLong(IvrTaskTemplateScriptVO::getSort));
+                cacheList.sort(Comparator.comparingLong(
+                        vo -> Optional.ofNullable(vo.getSort()).orElse(0)
+                ));
                 log.error("鐢佃瘽闅忚闂嵎鍥炵瓟缁撴灉锛歿}", cacheList.size());
                 for (int i = 0; i < cacheList.size(); i++) {
                     if (i == 0) {
                         //杩欎釜鏃堕棿瑕佹壘鍒扮涓�棰�
                         for (IvrTaskTemplateScriptVO ivrTaskTemplateScriptVO : cacheList) {
-                            if (ivrTaskTemplateScriptVO.getSort() == 1L) {
+                            if (ivrTaskTemplateScriptVO.getSort() != null && ivrTaskTemplateScriptVO.getSort() == 1L) {
                                 //璇存槑鏄涓�棰�
                                 List<IvrTaskTemplateTargetoption> ivrTaskTemplateTargetoptions = cacheList.get(0).getIvrTaskScriptTargetoptionList();
                                 ivrTaskTemplateScriptVO.setIvrTaskScriptTargetoptionList(ivrTaskTemplateTargetoptions);
                                 //瀹冧咯閮芥槸ivr_task_templatescript_id,鎵�浠ヨ繖閲岄渶瑕佽缃竴涓�
                                 ivrTaskTemplateScriptVO.setId(ivrTaskTemplateScriptVO.getScriptID());
-                                Map<String, String> map = setSFInfo(ivrTaskTemplateScriptVO, tid, pid);
+                                Map<String, String> map = setSFInfo(ivrTaskTemplateScriptVO, tid, pid, subid);
                                 if (!Objects.isNull(map.get("nextScriptNo")))
                                     nextScriptno = Long.valueOf(map.get("nextScriptNo"));
                                 if (score == null) {
@@ -406,7 +409,7 @@
                         ivrTaskTemplateScriptVO.setIvrTaskScriptTargetoptionList(ivrTaskTemplateTargetoptions);
 
                         if (ivrTaskTemplateScriptVO.getSort() != null && Long.valueOf(ivrTaskTemplateScriptVO.getSort()).equals(nextScriptno)) {
-                            Map<String, String> map = setSFInfo(ivrTaskTemplateScriptVO, tid, pid);
+                            Map<String, String> map = setSFInfo(ivrTaskTemplateScriptVO, tid, pid, subid);
                             log.error("----nextScriptNo2鐨勪俊鎭负锛歿}", map.get("nextScriptNo"));
                             if (!Objects.isNull(map.get("nextScriptNo")))
                                 nextScriptno = Long.valueOf(map.get("nextScriptNo"));
@@ -503,7 +506,7 @@
                             List<SvyTaskTemplateTargetoption> svyTaskTemplateTargetoptions = svyTaskTemplateScriptVOS.get(0).getSvyTaskTemplateTargetoptions();
 //                            List<SvyTaskTemplateTargetoption> svyTaskTemplateTargetoptions = DtoConversionUtils.sourceToTarget(svyTaskTemplateTargetoptions, SvyTaskTemplateTargetoption.class);
                             svyTaskTemplateScriptVO.setSvyTaskTemplateTargetoptions(svyTaskTemplateTargetoptions);
-                            Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, Long.valueOf(serviceSubTaskMYDAnswerReq.getTaskId()), patid);
+                            Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, Long.valueOf(serviceSubTaskMYDAnswerReq.getTaskId()), patid, null);
                             if (map == null) continue;
                             if (!Objects.isNull(map.get("nextScriptNo")))
                                 nextScriptno = Long.valueOf(map.get("nextScriptNo"));
@@ -527,7 +530,7 @@
 
                     if (svyTaskTemplateScriptVO.getSort() != null && svyTaskTemplateScriptVO.getSort().equals(nextScriptno)) {
                         log.error("svyTaskTemplateScriptVO鐨勫�间负锛歿}", svyTaskTemplateScriptVO);
-                        Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, Long.valueOf(serviceSubTaskMYDAnswerReq.getTaskId()), patid);
+                        Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, Long.valueOf(serviceSubTaskMYDAnswerReq.getTaskId()), patid, null);
                         log.error("map鐨勪俊鎭负锛歿}", map);
                         if (!Objects.isNull(map.get("nextScriptNo")))
                             nextScriptno = Long.valueOf(map.get("nextScriptNo"));
@@ -792,7 +795,7 @@
         return null;
     }
 
-    private Map<String, String> setWJInfo(SvyTaskTemplateScriptVO svyTaskTemplateScriptVO, Long taskid, Long patid) {
+    private Map<String, String> setWJInfo(SvyTaskTemplateScriptVO svyTaskTemplateScriptVO, Long taskid, Long patid, Long subid) {
         log.error("-----svyTaskTemplateScriptVO鐨勫�间负锛歿}", svyTaskTemplateScriptVO);
         ServiceSubtaskEntity serviceSubtaskVO = new ServiceSubtaskEntity();
         serviceSubtaskVO.setTaskid(taskid);
@@ -849,7 +852,7 @@
             serviceSubtaskDetailVO.setGuid(serviceTask.getGuid());
             serviceSubtaskDetailVO.setOrgid(serviceTask.getOrgid());
         }
-        serviceSubtaskDetailVO.setSubId(CollectionUtils.isNotEmpty(selectServiceSubtaskList) ? selectServiceSubtaskList.get(0).getId() : null);
+        serviceSubtaskDetailVO.setSubId(subid == null ? CollectionUtils.isNotEmpty(selectServiceSubtaskList) ? selectServiceSubtaskList.get(0).getId() : null : subid);
         serviceSubtaskDetailVO.setTemplatequestionnum(svyTaskTemplateScriptVO.getId());
         ServiceSubtaskDetail serviceSubtaskDetail = DtoConversionUtils.sourceToTarget(serviceSubtaskDetailVO, ServiceSubtaskDetail.class);
 
@@ -903,7 +906,7 @@
             JSONObject patdescJson1 = new JSONObject();
             patdescJson1.put("sendname", selectServiceSubtaskList.get(0).getSendname());
             patdescJson1.put("phone", selectServiceSubtaskList.get(0).getPhone());
-            patdescJson1.put("sex", selectServiceSubtaskList.get(0).getSex() == null ? selectServiceSubtaskList.get(0).getSex() == 1 ? "鐢�" : "濂�" : null);
+            patdescJson1.put("sex", selectServiceSubtaskList.get(0).getSex() != null ? selectServiceSubtaskList.get(0).getSex() == 1 ? "鐢�" : "濂�" : null);
             patdescJson1.put("age", selectServiceSubtaskList.get(0).getAge());
             subtaskDetailTrace.setPatdesc(patdescJson1.toJSONString());
             subtaskDetailTrace.setTodeptcode(svyTaskTemplateScriptVO.getDutyDeptCode());
@@ -913,8 +916,17 @@
             subtaskDetailTrace.setCreateTime(new Date());
             subtaskDetailTrace.setUpdateTime(new Date());
             subtaskDetailTrace.setOrgid(selectServiceSubtaskList.get(0).getOrgid());
-            traceService.insertServiceSubtaskDetailTtrace(subtaskDetailTrace);
-        } else if (ObjectUtils.isNotEmpty(stt) && stt.getIsabnormal() == 1L) {
+
+            ServiceSubtaskDetailTraceVO ssdt = new ServiceSubtaskDetailTraceVO();
+            ssdt.setSubId(subtaskDetailTrace.getSubId());
+            ssdt.setScriptid(subtaskDetailTrace.getScriptid());
+            ssdt.setTemplateType(subtaskDetailTrace.getTemplateType());
+            List<ServiceSubtaskDetailTrace> serviceSubtaskDetailTraces = traceService.selectServiceSubtaskDetailTtraceList(ssdt);
+            if (CollectionUtils.isNotEmpty(serviceSubtaskDetailTraces)) {
+                subtaskDetailTrace.setId(serviceSubtaskDetailTraces.get(0).getId());
+                traceService.updateServiceSubtaskDetailTtrace(subtaskDetailTrace);
+            } else traceService.insertServiceSubtaskDetailTtrace(subtaskDetailTrace);
+        } else if (ObjectUtils.isNotEmpty(stt) && stt.getIsabnormal() != 1L) {
             //杩欓噷涓昏鏄�曞尰鎶や汉鍛樻妸寮傚父閫夐」鏀规垚浜嗛潪寮傚父鐨勶紝杩欓噷灏遍渶瑕佹煡涓�涓嬭繖鏉℃暟鎹槸涓嶆槸鍦ㄦ弧鎰忓害寮傚父琛紝濡傛灉鍦紝鍒欒鍒犻櫎
             ServiceSubtaskDetailTraceVO subtaskDetailTraceVO = new ServiceSubtaskDetailTraceVO();
             subtaskDetailTraceVO.setSubId(serviceSubtaskDetailVO.getSubId());
@@ -1023,7 +1035,7 @@
         return commonTaskcallMQJson;
     }
 
-    private Map<String, String> setSFInfo(IvrTaskTemplateScriptVO ivrTaskTemplateScriptVO, Long taskid, Long patid) {
+    private Map<String, String> setSFInfo(IvrTaskTemplateScriptVO ivrTaskTemplateScriptVO, Long taskid, Long patid, Long subid) {
         ServiceSubtaskEntity serviceSubtaskVO = new ServiceSubtaskEntity();
         serviceSubtaskVO.setTaskid(taskid);
         serviceSubtaskVO.setPatid(patid);
@@ -1034,7 +1046,7 @@
         String nextScriptNo = null;
         ServiceSubtaskDetailVO serviceSubtaskDetailVO = new ServiceSubtaskDetailVO();
         String isabnormalFlag = "0";
-        if (ivrTaskTemplateScriptVO.getScriptType().equals("1") || ivrTaskTemplateScriptVO.getScriptType().equals("2")) {
+        if (ivrTaskTemplateScriptVO.getScriptType() != null && (ivrTaskTemplateScriptVO.getScriptType().equals("1") || ivrTaskTemplateScriptVO.getScriptType().equals("2"))) {
             //1銆�2涓哄崟閫夋垨澶氶��
             for (IvrTaskTemplateTargetoption ivrTaskTemplateTargetoption : ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList()) {
                 //灏嗛棶棰橀�夐」璁板綍涓嬫潵
@@ -1059,9 +1071,9 @@
             }
         } else {
             //闈炲崟澶氶��
-            if (StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getQuestionResult())) {
-                serviceSubtaskDetailVO.setAsrtext(ivrTaskTemplateScriptVO.getQuestionResult().replaceAll("^\"|\"$", ""));
-                serviceSubtaskDetailVO.setMatchedtext(ivrTaskTemplateScriptVO.getQuestionResult().replaceAll("^\"|\"$", ""));
+            if (StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getQuestionResult()) || StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getIvrtext())) {
+                serviceSubtaskDetailVO.setAsrtext(ivrTaskTemplateScriptVO.getQuestionResult() != null ? ivrTaskTemplateScriptVO.getQuestionResult().replaceAll("^\"|\"$", "") : ivrTaskTemplateScriptVO.getIvrtext());
+                serviceSubtaskDetailVO.setMatchedtext(ivrTaskTemplateScriptVO.getQuestionResult() != null ? ivrTaskTemplateScriptVO.getQuestionResult().replaceAll("^\"|\"$", "") : ivrTaskTemplateScriptVO.getIvrtext());
                 serviceSubtaskDetailVO.setScore(ivrTaskTemplateScriptVO.getScore() != null ? ivrTaskTemplateScriptVO.getScore().toString() : "0");
                 nextScriptNo = ivrTaskTemplateScriptVO.getNextScriptno() == null ? null : ivrTaskTemplateScriptVO.getNextScriptno().toString();
                 if (ivrTaskTemplateScriptVO.getScore() != null) {
@@ -1081,7 +1093,7 @@
         serviceSubtaskDetailVO.setGuid(ivrTaskTemplateScriptVO.getGuid());
         serviceSubtaskDetailVO.setOrgid(ivrTaskTemplateScriptVO.getOrgid());
         serviceSubtaskDetailVO.setUpdateTime(new Date());
-        serviceSubtaskDetailVO.setSubId(selectServiceSubtaskList.get(0).getId());
+        serviceSubtaskDetailVO.setSubId(subid == null ? selectServiceSubtaskList.get(0).getId() : subid);
         serviceSubtaskDetailVO.setTemplatequestionnum(ivrTaskTemplateScriptVO.getId());
         serviceSubtaskDetailVO.setTemplateType(1);
         serviceSubtaskDetailVO.setTemplateid(ivrTaskTemplateScriptVO.getTemplateID() == null ? null : ivrTaskTemplateScriptVO.getTemplateID().toString());
@@ -1131,9 +1143,7 @@
             subtaskDetailTrace.setGuid(ivrTaskTemplateScriptVO.getGuid());
             subtaskDetailTrace.setValueType(serviceSubtaskDetail.getValueType());
             subtaskDetailTrace.setTemplateType(1);
-
             subtaskDetailTrace.setType(ivrLibaScriptAssort != null ? ivrLibaScriptAssort.getType() : null);
-
             subtaskDetailTrace.setScriptid(ivrTaskTemplateScriptVO.getId() == null ? ivrTaskTemplateScriptVO.getScriptID() : ivrTaskTemplateScriptVO.getId());
             subtaskDetailTrace.setAsrtext(ivrTaskTemplateScriptVO.getIvrtext());
             subtaskDetailTrace.setRecordpath(null);
@@ -1141,7 +1151,7 @@
             JSONObject patdescJson2 = new JSONObject();
             patdescJson2.put("sendname", selectServiceSubtaskList.get(0).getSendname());
             patdescJson2.put("phone", selectServiceSubtaskList.get(0).getPhone());
-            patdescJson2.put("sex", selectServiceSubtaskList.get(0).getSex() == null ? selectServiceSubtaskList.get(0).getSex() == 1 ? "鐢�" : "濂�" : null);
+            patdescJson2.put("sex", selectServiceSubtaskList.get(0).getSex() != null ? selectServiceSubtaskList.get(0).getSex() == 1 ? "鐢�" : "濂�" : null);
             patdescJson2.put("age", selectServiceSubtaskList.get(0).getAge());
             subtaskDetailTrace.setPatdesc(patdescJson2.toJSONString());
             subtaskDetailTrace.setTodeptcode(ivrTaskTemplateScriptVO.getDutyDeptCode());
@@ -1151,8 +1161,17 @@
             subtaskDetailTrace.setCreateTime(new Date());
             subtaskDetailTrace.setUpdateTime(new Date());
             subtaskDetailTrace.setOrgid(selectServiceSubtaskList.get(0).getOrgid());
-            traceService.insertServiceSubtaskDetailTtrace(subtaskDetailTrace);
-        } else if (stt.getIsabnormal() != null && stt.getIsabnormal() != 1L) {
+
+            ServiceSubtaskDetailTraceVO ssdt = new ServiceSubtaskDetailTraceVO();
+            ssdt.setSubId(subtaskDetailTrace.getSubId());
+            ssdt.setScriptid(subtaskDetailTrace.getScriptid());
+            ssdt.setTemplateType(subtaskDetailTrace.getTemplateType());
+            List<ServiceSubtaskDetailTrace> serviceSubtaskDetailTraces = traceService.selectServiceSubtaskDetailTtraceList(ssdt);
+            if (CollectionUtils.isNotEmpty(serviceSubtaskDetailTraces)) {
+                subtaskDetailTrace.setId(serviceSubtaskDetailTraces.get(0).getId());
+                traceService.updateServiceSubtaskDetailTtrace(subtaskDetailTrace);
+            } else traceService.insertServiceSubtaskDetailTtrace(subtaskDetailTrace);
+        } else if (stt != null && stt.getIsabnormal() != null && stt.getIsabnormal() != 1L) {
             //杩欓噷涓昏鏄�曞尰鎶や汉鍛樻妸寮傚父閫夐」鏀规垚浜嗛潪寮傚父鐨勶紝杩欓噷灏遍渶瑕佹煡涓�涓嬭繖鏉℃暟鎹槸涓嶆槸鍦ㄦ弧鎰忓害寮傚父琛紝濡傛灉鍦紝鍒欒鍒犻櫎
             ServiceSubtaskDetailTraceVO subtaskDetailTraceVO = new ServiceSubtaskDetailTraceVO();
             subtaskDetailTraceVO.setSubId(serviceSubtaskDetailVO.getSubId());
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskRecordServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskRecordServiceImpl.java
index fbffad8..42b33a7 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskRecordServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskRecordServiceImpl.java
@@ -4,10 +4,14 @@
 import com.smartor.domain.ServiceSubtaskRecord;
 import com.smartor.mapper.ServiceSubtaskRecordMapper;
 import com.smartor.service.IServiceSubtaskRecordService;
+import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 銆愯濉啓鍔熻兘鍚嶇О銆慡ervice涓氬姟灞傚鐞�
@@ -42,6 +46,14 @@
         return serviceSubtaskRecordMapper.selectServiceSubtaskRecordList(serviceSubtaskRecord);
     }
 
+    @Override
+    public Map<Long, List<ServiceSubtaskRecord>> selectRecordMapBySubtaskIds(List<Long> subtaskIds) {
+        if (CollectionUtils.isEmpty(subtaskIds)) return new java.util.HashMap<>();
+        List<ServiceSubtaskRecord> all = serviceSubtaskRecordMapper.selectServiceSubtaskRecordBySubtaskIds(subtaskIds);
+        if (CollectionUtils.isEmpty(all)) return new java.util.HashMap<>();
+        return all.stream().collect(Collectors.groupingBy(ServiceSubtaskRecord::getSubtaskId));
+    }
+
     /**
      * 鏂板銆愯濉啓鍔熻兘鍚嶇О銆�
      *
diff --git a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskDetailTraceMapper.xml b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskDetailTraceMapper.xml
index 4595c28..a7c9511 100644
--- a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskDetailTraceMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskDetailTraceMapper.xml
@@ -160,6 +160,9 @@
         <if test="valueType != null  and valueType != ''">
             and value_type = #{valueType}
         </if>
+        <if test="scriptid != null and scriptids==null ">
+            and scriptid = #{scriptid}
+        </if>
         <if test="scriptids != null ">
             and scriptid in
             <foreach item="scriptid" collection="scriptids" open="(" separator="," close=")">
@@ -275,8 +278,6 @@
             and template_type = #{templateType}
         </if>
     </select>
-
-
 
 
     <select id="selectServiceSubtaskDetailTtraceById" parameterType="Long"
diff --git a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
index d4f0989..9f7cb36 100644
--- a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
@@ -265,8 +265,7 @@
     <select id="selectServiceSubtaskList" parameterType="com.smartor.domain.entity.ServiceSubtaskEntity"
             resultMap="ServiceSubtaskResult">
         <include refid="selectServiceSubtaskVo"/>
-        where 1=1
-        and del_flag = 0
+        where  del_flag = 0
         <if test="continueFlag != null ">and continue_flag = #{continueFlag}</if>
         <if test="continueTimeNow != null ">and continue_time_now = #{continueTimeNow,jdbcType=TIMESTAMP}</if>
         <if test="continueCount != null ">and continue_count = #{continueCount}</if>
diff --git a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskRecordMapper.xml b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskRecordMapper.xml
index b4a019e..fd7291d 100644
--- a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskRecordMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskRecordMapper.xml
@@ -74,6 +74,14 @@
             <if test="remark != null  and remark != ''">and remark = #{remark}</if>
     </select>
 
+    <select id="selectServiceSubtaskRecordBySubtaskIds" resultMap="ServiceSubtaskRecordResult">
+        <include refid="selectServiceSubtaskRecordVo"/>
+        where subtask_id IN
+        <foreach collection="list" item="subtaskId" open="(" separator="," close=")">
+            #{subtaskId}
+        </foreach>
+    </select>
+
     <select id="selectServiceSubtaskRecordById" parameterType="Long" resultMap="ServiceSubtaskRecordResult">
         <include refid="selectServiceSubtaskRecordVo"/>
         where id = #{id}

--
Gitblit v1.9.3