From 9fc52256df321e14a179811eda954491f5b71fea Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期五, 09 一月 2026 17:55:19 +0800
Subject: [PATCH] 【市一】问题统计接口调整

---
 smartor/src/main/java/com/smartor/mapper/SvyTaskTemplateScriptMapper.java     |   10 +++
 smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java |   72 ++++++++++++++++++++---
 smartor/src/main/resources/mapper/smartor/SvyTaskTemplateScriptMapper.xml     |   72 ++++++++++++++++++++++++
 smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml            |   10 ++
 4 files changed, 151 insertions(+), 13 deletions(-)

diff --git a/smartor/src/main/java/com/smartor/mapper/SvyTaskTemplateScriptMapper.java b/smartor/src/main/java/com/smartor/mapper/SvyTaskTemplateScriptMapper.java
index 9d65fcd..09532bf 100644
--- a/smartor/src/main/java/com/smartor/mapper/SvyTaskTemplateScriptMapper.java
+++ b/smartor/src/main/java/com/smartor/mapper/SvyTaskTemplateScriptMapper.java
@@ -1,5 +1,7 @@
 package com.smartor.mapper;
 
+import com.smartor.domain.ServiceSubtaskCountReq;
+import com.smartor.domain.ServiceSubtaskScriptCount;
 import com.smartor.domain.SvyTaskTemplateScript;
 import org.apache.ibatis.annotations.Mapper;
 
@@ -61,4 +63,12 @@
      * @return 缁撴灉
      */
     public int deleteSvyTaskTemplateScriptByIDs(Long[] IDs);
+
+    /**
+     * 鑾峰彇闂鍥炵瓟鎵�鏈夐�夐」
+     *
+     * @return 缁撴灉
+     */
+    public List<ServiceSubtaskScriptCount> getSvyTemplateScriptListForSubtaskCount(ServiceSubtaskCountReq serviceSubtaskCountReq);
+
 }
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 99eace4..87c8287 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
@@ -72,6 +72,9 @@
     private IvrTaskVisitResultMapper serviceTaskVisitResultMapper;
 
     @Autowired
+    private SvyTaskTemplateScriptMapper svyTaskTemplateScriptMapper;
+
+    @Autowired
     private IServiceTaskdeptService serviceTaskdeptService;
 
     @Autowired
@@ -2701,10 +2704,18 @@
             //婊℃剰搴�
             List<ServiceSubtaskCount> joyCountTemp = joySubCount.stream().filter(r -> r.getSubTaskId().equals(serviceSubtask.getId())).collect(Collectors.toList());
             if (joyCountTemp != null && joyCountTemp.size() > 0) {
-                if (ObjectUtils.isNotEmpty(joyCountTemp.get(0).getJoyCount()))
-                    serviceSubtaskStatistic.setJoyCount(serviceSubtaskStatistic.getJoyCount() + joyCountTemp.get(0).getJoyCount());
-                if (ObjectUtils.isNotEmpty(joyCountTemp.get(0).getJoyAllCount()))
-                    serviceSubtaskStatistic.setJoyAllCount(serviceSubtaskStatistic.getJoyAllCount() + joyCountTemp.get(0).getJoyAllCount());
+                Integer joyCount = joyCountTemp.get(0).getJoyCount();
+                Integer joyAllCount = joyCountTemp.get(0).getJoyAllCount();
+                if (ObjectUtils.isNotEmpty(joyCount)){
+                    if(joyCount>0){
+                        serviceSubtaskStatistic.setJoyCount(serviceSubtaskStatistic.getJoyCount() + joyCount);
+                    }
+                }
+                if (ObjectUtils.isNotEmpty(joyAllCount)){
+                    if(joyAllCount>0){
+                        serviceSubtaskStatistic.setJoyAllCount(serviceSubtaskStatistic.getJoyAllCount() + joyAllCount);
+                    }
+                }
             }
             //鏃犻渶闅忚浜烘
             if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 4) {
@@ -2949,7 +2960,7 @@
      * @return
      */
     @Override
-    @Cacheable(value = "sfStatisticsJoy", key = "T(org.springframework.util.DigestUtils).md5DigestAsHex(#serviceSubtaskCountReq.toString().getBytes())", unless = "#result == null or #result.isEmpty()")
+//    @Cacheable(value = "sfStatisticsJoy", key = "T(org.springframework.util.DigestUtils).md5DigestAsHex(#serviceSubtaskCountReq.toString().getBytes())", unless = "#result == null or #result.isEmpty()")
     public List<ServiceSubtaskStatistic> getSfStatisticsScript(ServiceSubtaskCountReq serviceSubtaskCountReq) {
         log.error("getSfStatisticsScript鐨勫叆鍙備负锛歿}", serviceSubtaskCountReq);
         List<ServiceSubtaskStatistic> serviceSubtaskStatistics = new ArrayList<>();
@@ -3015,18 +3026,19 @@
                 BigDecimal mydtblsum = new BigDecimal(0);
                 //瀹屾垚姣斾緥
                 Double wcbl = null;
-                if(ObjectUtils.isNotEmpty(serviceSubtaskStatistic.getJoyAllCount())){
-                    mydtblsum = new BigDecimal(serviceSubtaskStatistic.getJoyAllCount());
-                }
-
+                //婊℃剰搴﹀~鎶ラ噺
                 if(ObjectUtils.isNotEmpty(serviceSubtaskStatistic.getJoyCount())){
-                    mydtmzlsum = new BigDecimal(serviceSubtaskStatistic.getJoyCount());
+                    mydtblsum = new BigDecimal(serviceSubtaskStatistic.getJoyCount());
+                }
+                //婊℃剰搴﹂鐩�婚噺
+                if(ObjectUtils.isNotEmpty(serviceSubtaskStatistic.getJoyAllCount())){
+                    mydtmzlsum = new BigDecimal(serviceSubtaskStatistic.getJoyAllCount());
                 }
                 if(mydtmzlsum.intValue() != 0){
                     wcbl = mydtblsum.divide(mydtmzlsum, 2, RoundingMode.HALF_UP).doubleValue();
                 }
-                serviceSubtaskStatistic.setJoyAllCount(mydtmzlsum.intValue());
                 serviceSubtaskStatistic.setJoyCount(mydtblsum.intValue());
+                serviceSubtaskStatistic.setJoyAllCount(mydtmzlsum.intValue());
                 serviceSubtaskStatistic.setJoyTotal(wcbl);
             }
         }
@@ -3039,6 +3051,43 @@
         Map<String, ServiceSubtaskScriptCount> result = new HashMap<>();
         List<ServiceSubtaskScriptCount> allCounts = new ArrayList<>();
         List<ServiceSubtaskScriptCount> allItemCounts = new ArrayList<>();
+
+        List<ServiceSubtaskScriptCount> emptyCounts = svyTaskTemplateScriptMapper.getSvyTemplateScriptListForSubtaskCount(serviceSubtaskCountReq);
+        if(ObjectUtils.isNotEmpty(emptyCounts)){
+            Map<Long, List<ServiceSubtaskScriptCount>> emptyCountMap = emptyCounts.stream().collect(Collectors.groupingBy(ServiceSubtaskScriptCount::getScriptid));
+            for (Map.Entry<Long, List<ServiceSubtaskScriptCount>> entry : emptyCountMap.entrySet()) {
+                Long eScriptId = entry.getKey();
+                if(ObjectUtils.isNotEmpty(eScriptId)){
+                    ServiceSubtaskScriptCount eCount = new ServiceSubtaskScriptCount();
+                    List<ServiceSubtaskScriptCount> emptyCountList = entry.getValue();
+                    Map<String, ServiceSubtaskScriptCount> eMap = new HashMap<>();
+                    if(ObjectUtils.isNotEmpty(emptyCountList)){
+                        eCount.setScriptid(eScriptId);
+                        eCount.setScriptType(emptyCountList.get(0).getScriptType());
+                        eCount.setScriptContent(emptyCountList.get(0).getScriptContent());
+                        eCount.setTemplateid(emptyCountList.get(0).getTemplateid());
+                        eCount.setChosenQuantity(0);
+                        eCount.setChosenPercentage("0.0");
+                        eCount.setCompletedQuantity(0);
+                        eCount.setCompletedPercentage("0.0");
+                        eCount.setAllQuantity(0);
+                        //濉┖绌烘暟鎹�
+                        for(ServiceSubtaskScriptCount empCount: emptyCountList){
+                            empCount.setChosenQuantity(0);
+                            empCount.setChosenPercentage("0.0");
+                            empCount.setCompletedQuantity(0);
+                            empCount.setCompletedPercentage("0.0");
+                            empCount.setAllQuantity(0);
+                            eMap.put(empCount.getOptionText(),eCount);
+                        }
+                    }
+                    List<ServiceSubtaskScriptCount> empCountList = new ArrayList<>(eMap.values());
+                    eCount.setDetails(empCountList);
+                    result.put(eScriptId.toString(),eCount);
+                }
+            }
+        }
+
         String type = serviceSubtaskCountReq.getType();
         if(ObjectUtils.isEmpty(type)){
             //鏌ヨ璇煶缁熻鏄庣粏
@@ -3114,6 +3163,7 @@
                     }
                 }
             });
+
             List<ServiceSubtaskScriptCount> itemCounts = new ArrayList<>(itemCountMap.values());
             count.setDetails(itemCounts);
             result.put(count.getScriptid().toString(),count);
diff --git a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
index f75750b..7286c66 100644
--- a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
@@ -1330,12 +1330,18 @@
 
     <select id="getSfStatisticsCategory" parameterType="com.smartor.domain.ServiceSubtaskCountReq"
             resultMap="ServiceSubtaskResult2">
-        SELECT a.sub_id as subTaskId,
+        SELECT
+        <if test="configValue != null and configValue != ''">
+            SUM(CASE WHEN a.categoryid IN(${configValue})
+            AND IFNULL(a.matchedtext,a.asrtext) IS NOT NULL
+            AND IFNULL(a.matchedtext,a.asrtext) != ''
+            THEN 1 ELSE 0 END) AS joyCount,
+        </if>
         <if test="configValue != null and configValue != ''">
             SUM(CASE WHEN a.categoryid IN(${configValue})
             THEN 1 ELSE 0 END) AS joyAllCount,
         </if>
-        COUNT(sub_id) joyCount
+        a.sub_id as subTaskId
         FROM service_subtask_detail a
         INNER JOIN service_subtask t ON a.sub_id = t.id
         where 1=1
diff --git a/smartor/src/main/resources/mapper/smartor/SvyTaskTemplateScriptMapper.xml b/smartor/src/main/resources/mapper/smartor/SvyTaskTemplateScriptMapper.xml
index 57dba35..2fc9ce7 100644
--- a/smartor/src/main/resources/mapper/smartor/SvyTaskTemplateScriptMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/SvyTaskTemplateScriptMapper.xml
@@ -48,6 +48,21 @@
 
     </resultMap>
 
+    <resultMap type="com.smartor.domain.ServiceSubtaskScriptCount" id="ServiceSubtaskScriptCountResult">
+        <result property="scriptid" column="scriptid"/>
+        <result property="templateid" column="templateid"/>
+        <result property="scriptType" column="script_type"/>
+        <result property="scriptContent" column="script_content"/>
+        <result property="subtaskType" column="subtask_type"/>
+        <result property="completedQuantity" column="completed_quantity"/>
+        <result property="allQuantity" column="all_quantity"/>
+        <result property="completedPercentage" column="completed_percentage"/>
+        <result property="optionText" column="option_text"/>
+        <result property="chosenQuantity" column="chosen_quantity"/>
+        <result property="chosenPercentage" column="chosen_percentage"/>
+        <result property="options" column="options"/>
+    </resultMap>
+
     <sql id="selectSvyTaskTemplateScriptVo">
         select id,
                sort,
@@ -264,4 +279,61 @@
             #{id}
         </foreach>
     </delete>
+
+    <select id="getSvyTemplateScriptListForSubtaskCount" parameterType="com.smartor.domain.ServiceSubtaskCountReq"
+            resultMap="ServiceSubtaskScriptCountResult">
+        SELECT
+        ss.templateid,
+        ssd.scriptid,
+        task_script.script_type,
+        task_script.script_content,
+        task_targetoption.optioncontent AS option_text
+        FROM
+        service_subtask_detail ssd
+        INNER JOIN service_subtask ss ON ssd.sub_id = ss.id
+        INNER JOIN svy_task_template_script task_script
+        ON task_script.id = ssd.scriptid
+        INNER JOIN svy_task_template_targetoption task_targetoption
+        ON task_targetoption.scriptid = task_script.id
+        where 1=1
+        and ss.del_flag=0
+        <if test="orgid != null and orgid != ''">
+            and ss.orgid = #{orgid}
+        </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 date_format(ss.visit_time,'%y%m%d') >= date_format(#{startTime},'%y%m%d')
+            AND date_format(ss.visit_time,'%y%m%d') &lt;= date_format(#{endTime},'%y%m%d')
+        </if>
+        <!-- 鐩墠鍙粺璁¤闊冲拰闂嵎 -->
+        <if test="type != null">
+            and ss.type = #{type}
+        </if>
+        <if test="configValue != null and configValue != ''">
+            AND ssd.categoryid IN (${configValue})
+        </if>
+        group by ss.templateid, ssd.scriptid,
+                 task_script.script_type, task_script.script_content,
+                 task_targetoption.optioncontent
+    </select>
 </mapper>

--
Gitblit v1.9.3