From 17c8a50365c4607c2b001fd651231807a4d4bc5c Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期二, 03 十一月 2026 15:18:54 +0800
Subject: [PATCH] 【丽水】1、随访统计新增专病随访 2、指标统计详情超链接跳转

---
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java |   25 ++-
 smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java            |  127 +++++++++++++++++++++
 smartor/src/main/java/com/smartor/domain/ServiceSubtaskCountReq.java                     |   32 +++++
 smartor/src/main/java/com/smartor/mapper/ServiceSubtaskMapper.java                       |    8 +
 smartor/src/main/java/com/smartor/service/IServiceSubtaskService.java                    |    8 +
 smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml                       |  148 ++++++++++++++++++++++++
 6 files changed, 338 insertions(+), 10 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 af20ef9..8cea226 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
@@ -848,26 +848,35 @@
     @AddOrgId(field = "orgid", paramIndex = 0, campusField = "campusid")
     @PostMapping("/getSfStatisticsCountDetailsHyperLink")
     public AjaxResult getSfStatisticsCountDetailsHyperLink(@RequestBody ServiceSubtaskCountReq serviceSubtaskCountReq) {
+        Integer statisticaltype = serviceSubtaskCountReq.getStatisticaltype();
+        if (statisticaltype != null && statisticaltype != 1 && statisticaltype != 2 && statisticaltype != 3) {
+            return error("缁熻缁村害statisticaltype浠呮敮鎸侊細1-鎸夌梾鍖� 2-鎸夌瀹� 3-鎸塼askid");
+        }
+        if (serviceSubtaskCountReq.getScriptid() == null
+                && StringUtils.isEmpty(serviceSubtaskCountReq.getScriptContent())) {
+            return error("闂ID(scriptid)涓嶈兘涓虹┖");
+        }
+        if (serviceSubtaskCountReq.getOptionText() == null) {
+            return error("闂閫夐」(optionText)涓嶈兘涓虹┖");
+        }
+
         LoginUser loginUser = getLoginUser();
         String orgid = loginUser.getUser().getOrgid();
+        serviceSubtaskCountReq.setOrgid(orgid);
+
+        // 涓� getSfStatisticsCountDetails 淇濇寔鐩稿悓鐨勯厤缃瓫閫夊彛寰�
         String configKey = serviceSubtaskCountReq.getConfigKey();
         if (StringUtils.isNotEmpty(configKey)) {
             String configValue = configService.selectConfigByKey(configKey, orgid);
             serviceSubtaskCountReq.setConfigValue(configValue);
             if (StringUtils.isEmpty(configValue)) {
-                String logInfo = "getSfStatisticsCount-鍙傛暟 " + configKey + " 鏈厤缃�, 璇烽厤缃ソ鍚庨噸璇�";
+                String logInfo = "getSfStatisticsCountDetailsHyperLink-鍙傛暟 " + configKey + " 鏈厤缃�, 璇烽厤缃ソ鍚庨噸璇�";
                 log.error(logInfo);
                 return error(logInfo);
             }
         }
 
-        String followUpCountStyle = configService.selectConfigByKey("followUpCountStyle", orgid);
-        if (ObjectUtils.isNotEmpty(followUpCountStyle)) {
-            serviceSubtaskCountReq.setFollowUpCountStyle(followUpCountStyle);
-        } else {
-            serviceSubtaskCountReq.setFollowUpCountStyle("1");
-        }
-        return success(serviceSubtaskService.getSfStatisticsHyperlink(serviceSubtaskCountReq));
+        return success(serviceSubtaskService.getSfStatisticsScriptDetailsHyperlink(serviceSubtaskCountReq));
     }
     /**
      * 鍙戦�佺煭淇℃ā鏉�
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskCountReq.java b/smartor/src/main/java/com/smartor/domain/ServiceSubtaskCountReq.java
index 433a76f..d150385 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskCountReq.java
+++ b/smartor/src/main/java/com/smartor/domain/ServiceSubtaskCountReq.java
@@ -1,6 +1,7 @@
 package com.smartor.domain;
 
 import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.annotation.JsonAlias;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.common.annotation.Excel;
 import io.swagger.annotations.ApiModel;
@@ -69,7 +70,8 @@
     @ApiModelProperty(value = "瀛愪换鍔d闆嗗悎")
     private List<Long> subTaskIds;
 
-    @ApiModelProperty(value = "绉戝鐥呭尯锛�1锛岀梾鍖虹粺璁�  2锛岀瀹ょ粺璁�  3. 鐥呯缁熻")
+    @ApiModelProperty(value = "缁熻缁村害锛�1-鎸夌梾鍖�(leavehospitaldistrictcode) 2-鎸夌瀹�(deptcode) 3-鎸塼askid")
+    @JsonAlias("statisticalType")
     private Integer statisticaltype;
 
     private String visitDeptCode;
@@ -127,6 +129,33 @@
      */
     @ApiModelProperty(value = "闂缂栫爜")
     private String scriptids;
+
+    /**
+     * 闂ID锛堥鐩槑缁嗚杩斿洖鐨� scriptid锛夛紝鐢ㄤ簬閫夐」鏁板瓧涓嬮捇
+     */
+    @ApiModelProperty(value = "闂ID")
+    @JsonAlias("scriptId")
+    private Long scriptid;
+
+    /**
+     * 闂鍐呭銆備紶鍏ュ悗鎸夐鐩唴瀹瑰尮閰嶏紝鍏煎鍚屼竴閬撻琚鍒跺埌澶氫釜浠诲姟妯℃澘鐨勫満鏅�
+     */
+    @ApiModelProperty(value = "闂鍐呭")
+    private String scriptContent;
+
+    /**
+     * 閫夐」鏂囨湰锛堥鐩槑缁嗚杩斿洖鐨� optionText锛�
+     */
+    @ApiModelProperty(value = "閫夐」鏂囨湰")
+    @JsonAlias({"optiontext", "option", "optionContent"})
+    private String optionText;
+
+    /**
+     * 棰樼洰鏄庣粏涓殑浠诲姟绫诲瀷锛坰ubtaskType锛夛紝鐢ㄤ簬涓嬮捇鏃跺尯鍒嗚闊�/闂嵎
+     */
+    @ApiModelProperty(value = "浠诲姟绫诲瀷锛堥鐩槑缁嗕腑鐨� subtaskType锛�")
+    @JsonAlias("subTaskType")
+    private String subtaskType;
 
     /**
      * 鍒嗙粍绫诲瀷 drCode, deptCode, leaveHospitalDistrictCode
@@ -207,6 +236,7 @@
     private String hyperLinkInfoType;
 
     @ApiModelProperty(value = "浠诲姟ID", required = true)
+    @JsonAlias("taskid")
     private Long taskId;
 
     @ApiModelProperty(value = "taskIds闆嗗悎")
diff --git a/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskMapper.java b/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskMapper.java
index 877625d..9abb3a5 100644
--- a/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskMapper.java
+++ b/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskMapper.java
@@ -221,6 +221,14 @@
      */
     public List<ServiceSubtaskScriptCount> getSfStatisticsScriptItemDetails(ServiceSubtaskCountReq serviceSubtaskCountReq);
 
+    /**
+     * 闂閫夐」鏁板瓧涓嬮捇锛氭煡璇㈤�夋嫨浜嗘寚瀹氶�夐」鐨� service_subtask 鍒楄〃
+     *
+     * @param serviceSubtaskCountReq 缁熻缁村害銆佺瀹�/鐥呭尯銆佷换鍔°�侀鐩強閫夐」鏉′欢
+     * @return service_subtask 鍒楄〃
+     */
+    public List<ServiceSubtask> getSfStatisticsScriptDetailsHyperlink(ServiceSubtaskCountReq serviceSubtaskCountReq);
+
 
     public List<PatMedRes> getDeptRanking(PatMedReq patMedReq);
 
diff --git a/smartor/src/main/java/com/smartor/service/IServiceSubtaskService.java b/smartor/src/main/java/com/smartor/service/IServiceSubtaskService.java
index 8b56ef5..75ce6fc 100644
--- a/smartor/src/main/java/com/smartor/service/IServiceSubtaskService.java
+++ b/smartor/src/main/java/com/smartor/service/IServiceSubtaskService.java
@@ -202,6 +202,14 @@
 
     public Map<String, Object> getSfStatisticsScriptDetails(ServiceSubtaskCountReq serviceSubtaskCountReq);
 
+    /**
+     * 闂閫夐」鏁板瓧涓嬮捇锛氭煡璇㈤�夋嫨浜嗘寚瀹氶�夐」鐨� service_subtask 鍒楄〃
+     *
+     * @param serviceSubtaskCountReq 缁熻缁村害銆佺瀹�/鐥呭尯銆佷换鍔°�侀鐩強閫夐」鏉′欢
+     * @return service_subtask 鍒楄〃
+     */
+    public List<ServiceSubtask> getSfStatisticsScriptDetailsHyperlink(ServiceSubtaskCountReq serviceSubtaskCountReq);
+
     public List<PatArchiveSrmVO> sendMsgTemplate(List<PatArchiveSrmVO> patArchiveSrmVOS);
 
     public List<ServiceSubtaskDiagname> convertToDiagnameList(List<ServiceSubtask> subtaskList);
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 9537783..bdcb5e9 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
@@ -3427,6 +3427,9 @@
             } else {
                 groupKey = "deptcode";
             }
+        } else if (serviceSubtaskCountReq.getStatisticaltype() != null && serviceSubtaskCountReq.getStatisticaltype() == 3) {
+            // 鐥呯缁熻锛氭寜浠诲姟ID鍒嗙粍锛屾瘡涓换鍔″嵆涓�涓梾绉嶉殢璁夸换鍔�
+            groupKey = "taskid";
         }
         List<ServiceSubtaskStatistic> serviceSubtaskStatistics = new ArrayList<>();
         // 鏍规嵁鏉′欢杩涜鍒嗙粍
@@ -3452,6 +3455,9 @@
             case "leavehospitaldistrictcode":
                 collect = rawData.stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getLeavehospitaldistrictcode()).orElse("Unknown")));
                 break;
+            case "taskid":
+                collect = rawData.stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getTaskid()).map(String::valueOf).orElse("Unknown")));
+                break;
             default:
                 collect = rawData.stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getDrcode()).orElse("Unknown")));
                 break;
@@ -3464,6 +3470,9 @@
                 continue;
             }
             ServiceSubtaskStatistic statistic = getStatistic(serviceSubtaskList, serviceSubtaskCountReq.getFollowUpCountStyle(), serviceSubtaskCountReq.getVisitCount());
+            if ("taskid".equals(groupKey)) {
+                applyTaskGroupInfo(statistic, serviceSubtaskList);
+            }
             if (ObjectUtils.isNotEmpty(jsRates)) {
                 Map<String, Object> jsRateMap = jsRates.get(collectKey);
                 BigDecimal jsRate = new BigDecimal("0");
@@ -3540,7 +3549,13 @@
         ssRate.setRateDay(serviceSubtaskCountReq.getRateDay());
         Map<String, Map<String, Object>> jsRates = new HashMap<>();
         if (!collect.isEmpty()) {
-            jsRates = serviceSubtaskMapper.selectTimelyRateBatch(ssRate);
+            Map<String, Map<String, Object>> rateResult = serviceSubtaskMapper.selectTimelyRateBatch(ssRate);
+            if (rateResult != null && !rateResult.isEmpty()) {
+                // taskid 涓烘暟鍊肩被鍨嬶紝MyBatis 杩斿洖鐨� Map key 鍙兘鏄� Long锛岃繖閲岀粺涓�杞垚 String 涓庡垎缁� key 瀵归綈
+                for (Map.Entry<String, Map<String, Object>> entry : rateResult.entrySet()) {
+                    jsRates.put(String.valueOf(entry.getKey()), entry.getValue());
+                }
+            }
         }
         return jsRates;
     }
@@ -3553,6 +3568,9 @@
             ServiceSubtaskStatistic totalRow = calculateTotalRow(sfStatistics);
             totalRow.setLeavehospitaldistrictname("鎬昏");
             totalRow.setDeptname("鎬昏");
+            if (serviceSubtaskCountReq.getStatisticaltype() != null && serviceSubtaskCountReq.getStatisticaltype() == 3) {
+                totalRow.setTaskName("鎬昏");
+            }
             sfStatistics.add(totalRow);
         }
 
@@ -3745,6 +3763,22 @@
         return map;
     }
 
+
+    /**
+     * 鐥呯缁熻锛堟寜 taskid 鍒嗙粍锛夋椂琛ラ綈浠诲姟ID銆佷换鍔″悕绉板拰鐤剧梾鐥呯銆�
+     *
+     * @param statistic            缁熻缁撴灉
+     * @param serviceSubtaskList   褰撳墠浠诲姟鍒嗙粍涓嬬殑瀛愪换鍔�
+     */
+    private void applyTaskGroupInfo(ServiceSubtaskStatistic statistic, List<ServiceSubtask> serviceSubtaskList) {
+        if (statistic == null || CollectionUtils.isEmpty(serviceSubtaskList)) {
+            return;
+        }
+        ServiceSubtask first = serviceSubtaskList.get(0);
+        statistic.setTaskId(first.getTaskid());
+        statistic.setTaskName(first.getTaskName());
+        statistic.setDiagType(first.getDiagType());
+    }
 
     private ServiceSubtaskStatistic getStatistic(List<ServiceSubtask> serviceSubtaskList, String followUpCountStyle, Integer visitCount) {
         ServiceSubtaskStatistic serviceSubtaskStatistic = new ServiceSubtaskStatistic();
@@ -5211,6 +5245,9 @@
             } else {
                 groupKey = "deptcode";
             }
+        } else if (serviceSubtaskCountReq.getStatisticaltype() != null && serviceSubtaskCountReq.getStatisticaltype() == 3) {
+            // 鐥呯缁熻锛氭寜浠诲姟ID鍒嗙粍
+            groupKey = "taskid";
         }
         serviceSubtaskCountReq.setGroupKey(groupKey);
         List<String> groupKeyList = serviceSubtaskMapper.getSfStatisticsGroupKey(serviceSubtaskCountReq);
@@ -5225,6 +5262,9 @@
                 break;
             case "leavehospitaldistrictcode":
                 collect = rawData.stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getLeavehospitaldistrictcode()).orElse("Unknown")));
+                break;
+            case "taskid":
+                collect = rawData.stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getTaskid()).map(String::valueOf).orElse("Unknown")));
                 break;
             default:
                 collect = rawData.stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getDrcode()).orElse("Unknown")));
@@ -5245,6 +5285,9 @@
                 continue;
             }
             ServiceSubtaskStatistic statistic = getStatisticCategory(serviceSubtaskList, serviceSubtaskCountReq, subCounts);
+            if ("taskid".equals(groupKey)) {
+                applyTaskGroupInfo(statistic, serviceSubtaskList);
+            }
             if (ObjectUtils.isNotEmpty(jsRates)) {
                 Map<String, Object> jsRateMap = jsRates.get(collectKey);
                 BigDecimal jsRate = new BigDecimal("0");
@@ -5431,6 +5474,88 @@
         return result;
     }
 
+    /**
+     * 闂閫夐」鏁板瓧涓嬮捇锛氳繑鍥為�夋嫨浜嗘寚瀹氶�夐」鐨� service_subtask 鍒楄〃銆�
+     * <p>
+     * 缁熻鏄庣粏涓殑閫夐」鏁伴噺鏉ヨ嚜 service_subtask_detail 鐨�
+     * IFNULL(matchedtext, asrtext)锛屽洜姝や笅閽诲繀椤讳娇鐢ㄥ悓涓�棰樼洰鐨勭浉鍚岄�夐」杩涜鍖归厤銆�
+     *
+     * @param serviceSubtaskCountReq 涓嬮捇鏉′欢
+     * @return service_subtask 鍒楄〃
+     */
+    @Override
+    public List<ServiceSubtask> getSfStatisticsScriptDetailsHyperlink(ServiceSubtaskCountReq serviceSubtaskCountReq) {
+        log.info("getSfStatisticsScriptDetailsHyperlink鐨勫叆鍙備负锛歿}", serviceSubtaskCountReq);
+        if (serviceSubtaskCountReq == null) {
+            return new ArrayList<>();
+        }
+        // 鍏煎鍓嶇鐩存帴鍥炰紶缁熻鏄庣粏琛屼腑鐨� subtaskType
+        if (StringUtils.isBlank(serviceSubtaskCountReq.getType())
+                && StringUtils.isNotBlank(serviceSubtaskCountReq.getSubtaskType())) {
+            serviceSubtaskCountReq.setType(serviceSubtaskCountReq.getSubtaskType());
+        }
+        resolveScriptContentAndType(serviceSubtaskCountReq);
+        if (StringUtils.isBlank(serviceSubtaskCountReq.getScriptContent())
+                && serviceSubtaskCountReq.getScriptid() == null) {
+            log.warn("getSfStatisticsScriptDetailsHyperlink-棰樼洰scriptid鍜宻criptContent鍧囦负绌猴紝杩斿洖绌哄垪琛�");
+            return new ArrayList<>();
+        }
+        if (serviceSubtaskCountReq.getOptionText() == null) {
+            log.warn("getSfStatisticsScriptDetailsHyperlink-閫夐」optionText涓虹┖锛岃繑鍥炵┖鍒楄〃");
+            return new ArrayList<>();
+        }
+        return serviceSubtaskMapper.getSfStatisticsScriptDetailsHyperlink(serviceSubtaskCountReq);
+    }
+
+    /**
+     * 鏍规嵁 scriptid 琛ラ綈棰樼洰鍐呭鍜屼换鍔$被鍨嬨��
+     * <p>
+     * 缁熻鏄庣粏鎸夆�滈鐩唴瀹� + 浠诲姟绫诲瀷鈥濆悎骞讹紝鍚屼竴閬撻澶嶅埗鍒板涓换鍔℃ā鏉挎椂 scriptid 鍙兘涓嶅悓锛�
+     * 鍥犳浼樺厛鎸夐鐩唴瀹逛笅閽伙紱鍙湁鏌ヤ笉鍒伴鐩唴瀹规椂鎵嶉��鍖栦负 scriptid 绮剧‘鍖归厤銆�
+     */
+    private void resolveScriptContentAndType(ServiceSubtaskCountReq serviceSubtaskCountReq) {
+        if (serviceSubtaskCountReq.getScriptid() == null) {
+            return;
+        }
+        // 宸叉湁棰樼洰鍐呭鍜屼换鍔$被鍨嬫椂鏃犻渶鍐嶆煡妯℃澘闂琛�
+        if (StringUtils.isNotBlank(serviceSubtaskCountReq.getScriptContent())
+                && StringUtils.isNotBlank(serviceSubtaskCountReq.getType())) {
+            return;
+        }
+
+        String type = serviceSubtaskCountReq.getType();
+        if (StringUtils.isBlank(type) || "1".equals(type)) {
+            IvrTaskTemplateScript ivrTaskTemplateScript =
+                    iIvrTaskTemplateScriptService.selectIvrTaskTemplateScriptByID(serviceSubtaskCountReq.getScriptid());
+            if (ObjectUtils.isNotEmpty(ivrTaskTemplateScript)) {
+                if (StringUtils.isBlank(serviceSubtaskCountReq.getType())) {
+                    serviceSubtaskCountReq.setType("1");
+                }
+                if (StringUtils.isBlank(serviceSubtaskCountReq.getScriptContent())) {
+                    serviceSubtaskCountReq.setScriptContent(ivrTaskTemplateScript.getScriptContent());
+                }
+                return;
+            }
+            // 鏄庣‘鎸囧畾浜嗚闊崇被鍨嬫椂涓嶅啀灏濊瘯闂嵎琛�
+            if (StringUtils.isNotBlank(type)) {
+                return;
+            }
+        }
+
+        if (StringUtils.isBlank(serviceSubtaskCountReq.getType()) || "2".equals(type)) {
+            SvyTaskTemplateScript svyTaskTemplateScript =
+                    svyTaskTemplateScriptService.selectSvyTaskTemplateScriptByID(serviceSubtaskCountReq.getScriptid());
+            if (ObjectUtils.isNotEmpty(svyTaskTemplateScript)) {
+                if (StringUtils.isBlank(serviceSubtaskCountReq.getType())) {
+                    serviceSubtaskCountReq.setType("2");
+                }
+                if (StringUtils.isBlank(serviceSubtaskCountReq.getScriptContent())) {
+                    serviceSubtaskCountReq.setScriptContent(svyTaskTemplateScript.getScriptContent());
+                }
+            }
+        }
+    }
+
 
     /**
      * @param serviceSubtask
diff --git a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
index 371bbab..76ade62 100644
--- a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
@@ -103,6 +103,7 @@
         <result property="loopCount" column="loop_count"/>
         <result property="isManuallyCalled" column="is_manually_called"/>
         <result property="campusid" column="campusid"/>
+        <result property="diagType" column="diag_type"/>
     </resultMap>
 
     <resultMap type="com.smartor.domain.ServiceSubtaskCount" id="ServiceSubtaskResult2">
@@ -1706,6 +1707,9 @@
         nurse_name,
         taskid,
         task_name,
+        <if test="groupKey != null and groupKey == 'taskid'">
+            (SELECT st.diag_type FROM service_task st WHERE st.taskid = service_subtask.taskid LIMIT 1) AS diag_type,
+        </if>
         visit_time,
         visit_dept_code,
         finishtime,
@@ -1749,6 +1753,13 @@
             <foreach collection="deptcodes" item="deptcode" open="(" separator=","
                      close=")">
                 #{deptcode}
+            </foreach>
+        </if>
+        <if test="taskIds != null and taskIds.size() > 0">
+            AND taskid IN
+            <foreach collection="taskIds" item="taskId" open="(" separator=","
+                     close=")">
+                #{taskId}
             </foreach>
         </if>
         <if test="serviceType != null and serviceType.size() > 0">
@@ -1932,6 +1943,13 @@
             <foreach collection="deptcodes" item="deptcode" open="(" separator=","
                      close=")">
                 #{deptcode}
+            </foreach>
+        </if>
+        <if test="taskIds != null and taskIds.size() > 0">
+            AND taskid IN
+            <foreach collection="taskIds" item="taskId" open="(" separator=","
+                     close=")">
+                #{taskId}
             </foreach>
         </if>
         <if test="serviceType != null and serviceType.size() > 0">
@@ -2475,6 +2493,136 @@
         group by a.script_content, ss.type, IFNULL(ssd.matchedtext,ssd.asrtext)
     </select>
 
+    <!--
+      闂閫夐」鏁板瓧涓嬮捇锛氳繑鍥為�夋嫨浜嗘寚瀹氶�夐」鐨� service_subtask 鍒楄〃銆�
+      杩囨护鍙e緞涓� getSfStatisticsScriptDetails / getSfStatisticsScriptItemDetails 淇濇寔涓�鑷达紝
+      棰濆鏀寔 statisticaltype锛�1-鐥呭尯銆�2-绉戝銆�3-鐥呯銆�
+    -->
+    <select id="getSfStatisticsScriptDetailsHyperlink" parameterType="com.smartor.domain.ServiceSubtaskCountReq"
+            resultMap="ServiceSubtaskResult">
+        SELECT ss.*
+        FROM service_subtask ss
+        WHERE ss.del_flag = 0
+        <if test="orgid != null and orgid != ''">
+            AND ss.orgid = #{orgid}
+        </if>
+        <if test="campusid != null and campusid != ''">
+            AND ss.campusid = #{campusid}
+        </if>
+        <if test="leavehospitaldistrictcodes != null and leavehospitaldistrictcodes.size() > 0">
+            AND ss.leavehospitaldistrictcode IN
+            <foreach collection="leavehospitaldistrictcodes" item="leavehospitaldistrictcode" open="(" separator=","
+                     close=")">
+                #{leavehospitaldistrictcode}
+            </foreach>
+        </if>
+        <if test="deptcodes != null and deptcodes.size() > 0">
+            AND ss.deptcode IN
+            <foreach collection="deptcodes" item="deptcode" open="(" separator="," close=")">
+                #{deptcode}
+            </foreach>
+        </if>
+        <if test="serviceType != null and serviceType.size() > 0">
+            AND ss.service_type IN
+            <foreach collection="serviceType" item="serviceType" open="(" separator="," close=")">
+                #{serviceType}
+            </foreach>
+        </if>
+        <if test="startTime != null and endTime != null">
+            AND ss.visit_time >= DATE(#{startTime})
+            AND ss.visit_time &lt; DATE_ADD(DATE(#{endTime}), INTERVAL 1 DAY)
+        </if>
+        <if test="type != null and type != ''">
+            AND ss.type = #{type}
+        </if>
+
+        <!-- 缁熻缁村害锛�1-鎸夌梾鍖� 2-鎸夌瀹� 3-鎸塼askid -->
+        <if test="statisticaltype != null and statisticaltype == 1">
+            <choose>
+                <when test="deptcode != null and deptcode != ''">
+                    AND ss.leavehospitaldistrictcode = #{deptcode}
+                </when>
+                <when test="leavehospitaldistrictcode != null and leavehospitaldistrictcode != ''">
+                    AND ss.leavehospitaldistrictcode = #{leavehospitaldistrictcode}
+                </when>
+            </choose>
+        </if>
+        <if test="statisticaltype != null and statisticaltype == 2 and deptcode != null and deptcode != ''">
+            AND ss.deptcode = #{deptcode}
+        </if>
+        <if test="statisticaltype != null and statisticaltype == 3 and taskId != null">
+            AND ss.taskid = #{taskId}
+        </if>
+        <!-- 鍏煎涓嶄紶 statisticaltype 鏃舵寜鍗曞�兼潯浠惰繃婊� -->
+        <if test="statisticaltype == null">
+            <if test="leavehospitaldistrictcode != null and leavehospitaldistrictcode != ''">
+                AND ss.leavehospitaldistrictcode = #{leavehospitaldistrictcode}
+            </if>
+            <if test="deptcode != null and deptcode != ''">
+                AND ss.deptcode = #{deptcode}
+            </if>
+            <if test="taskId != null">
+                AND ss.taskid = #{taskId}
+            </if>
+        </if>
+
+        <!-- 棰樼洰 + 閫夐」鍖归厤锛氬彧淇濈暀鍥炵瓟涓�夋嫨浜嗚閫夐」鐨勫瓙浠诲姟 -->
+        AND EXISTS (
+            SELECT 1
+            FROM service_subtask_detail ssd
+            WHERE ssd.sub_id = ss.id
+              AND ssd.del_flag = 0
+            <if test="configValue != null and configValue != ''">
+                AND ssd.categoryid IN (${configValue})
+            </if>
+            <choose>
+                <when test="optionText != null">
+                    AND IFNULL(ssd.matchedtext, ssd.asrtext) = #{optionText}
+                </when>
+                <otherwise>
+                    AND 1 = 0
+                </otherwise>
+            </choose>
+            <choose>
+                <!-- 浼樺厛鎸夐鐩唴瀹瑰尮閰嶏細鍚屼竴閬撻澶嶅埗鍒板涓换鍔℃ā鏉挎椂 scriptid 涓嶅悓锛屼絾 script_content 鐩稿悓 -->
+                <when test="scriptContent != null and scriptContent != ''">
+                    AND ssd.scriptid IN (
+                        <choose>
+                            <when test="type == '1'">
+                                SELECT its.id FROM ivr_task_template_script its
+                                WHERE its.script_content = #{scriptContent}
+                            </when>
+                            <when test="type == '2'">
+                                SELECT sts.id FROM svy_task_template_script sts
+                                WHERE sts.script_content = #{scriptContent}
+                            </when>
+                            <otherwise>
+                                SELECT its.id FROM ivr_task_template_script its
+                                WHERE its.script_content = #{scriptContent}
+                                UNION
+                                SELECT sts.id FROM svy_task_template_script sts
+                                WHERE sts.script_content = #{scriptContent}
+                            </otherwise>
+                        </choose>
+                    )
+                </when>
+                <when test="scriptid != null">
+                    AND ssd.scriptid = #{scriptid}
+                </when>
+                <otherwise>
+                    AND 1 = 0
+                </otherwise>
+            </choose>
+        )
+        ORDER BY ss.endtime DESC, ss.id DESC
+        <if test="pageSize != null and pageSize > 0">
+            LIMIT #{pageSize}
+            <if test="pageNum != null and pageNum >= 0">
+                OFFSET #{pageNum}
+            </if>
+        </if>
+    </select>
+
     <select id="getDataByTime" resultMap="ServiceSubtaskResult">
 
         select id,

--
Gitblit v1.9.3