From a5482140ab58009b2453fe982da1fd9764a7a4ab Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期四, 08 一月 2026 15:32:41 +0800
Subject: [PATCH] 【市一】提供问题统计接口(通过scriptid)

---
 smartor/src/main/java/com/smartor/service/ISvyLibTemplateScriptService.java                    |   11 +++
 smartor/src/main/java/com/smartor/service/impl/SvyLibTemplateScriptServiceImpl.java            |   93 ++++++++++++++++++++++++++++++
 ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISServiceImpl.java            |    1 
 smartor/src/main/java/com/smartor/domain/ServiceSubtaskCountReq.java                           |    6 ++
 smartor/src/main/resources/mapper/smartor/ServiceSubtaskDetailMapper.xml                       |    2 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SvyLibTemplateScriptController.java |   13 ++++
 ruoyi-admin/src/main/resources/application.yml                                                 |    2 
 smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml                             |    4 +
 8 files changed, 129 insertions(+), 3 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SvyLibTemplateScriptController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SvyLibTemplateScriptController.java
index 7aa12cd..f52c70e 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SvyLibTemplateScriptController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SvyLibTemplateScriptController.java
@@ -8,8 +8,10 @@
 import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.smartor.domain.ServiceSubtaskCountReq;
 import com.smartor.domain.SvyLibTemplateScript;
 import com.smartor.service.ISvyLibTemplateScriptService;
+import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
@@ -101,4 +103,15 @@
     {
         return toAjax(svyLibTemplateScriptService.deleteSvyLibTemplateScriptByTopicids(topicids));
     }
+
+
+    /**
+     * 闂缁熻
+     */
+    @ApiOperation("闂缁熻")
+    @AddOrgId
+    @PostMapping(value = "/countPatByScript")
+    public AjaxResult countPatByScript(@RequestBody ServiceSubtaskCountReq serviceSubtaskCountReq) {
+        return success(svyLibTemplateScriptService.countPatByScript(serviceSubtaskCountReq));
+    }
 }
diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
index 0f69eba..79bbd46 100644
--- a/ruoyi-admin/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -74,7 +74,7 @@
     # 鍥介檯鍖栬祫婧愭枃浠惰矾寰�
     basename: i18n/messages
   profiles:
-    active: ls
+    active: druid
 
   # 鏂囦欢涓婁紶
   servlet:
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISServiceImpl.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISServiceImpl.java
index 0ef55b5..23167f6 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISServiceImpl.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISServiceImpl.java
@@ -464,6 +464,7 @@
             if (sysDeptTemp != null && sysDeptTemp.getDeptName() != null) {
                 row.setDeptId(sysDeptTemp.getDeptId());
                 count += sysDept2Mapper.updateDept(row);
+
             } else {
                 count += sysDept2Mapper.insertDept(row);
             }
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskCountReq.java b/smartor/src/main/java/com/smartor/domain/ServiceSubtaskCountReq.java
index 9ceb423..f6654bf 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskCountReq.java
+++ b/smartor/src/main/java/com/smartor/domain/ServiceSubtaskCountReq.java
@@ -78,6 +78,12 @@
     private String orgid;
 
     /**
+     * 闂缂栫爜-鏌ヨ浣跨敤锛屾敮鎸佸涓棶棰橈紝鐢ㄩ�楀彿鍖哄垎
+     */
+    @ApiModelProperty(value = "闂缂栫爜")
+    private String scriptids;
+
+    /**
      * pageNum
      */
     @ApiModelProperty("pageNum")
diff --git a/smartor/src/main/java/com/smartor/service/ISvyLibTemplateScriptService.java b/smartor/src/main/java/com/smartor/service/ISvyLibTemplateScriptService.java
index 5fa8498..20c730b 100644
--- a/smartor/src/main/java/com/smartor/service/ISvyLibTemplateScriptService.java
+++ b/smartor/src/main/java/com/smartor/service/ISvyLibTemplateScriptService.java
@@ -1,8 +1,11 @@
 package com.smartor.service;
 
+import com.smartor.domain.ServiceSubtaskCountReq;
+import com.smartor.domain.ServiceSubtaskScriptCount;
 import com.smartor.domain.SvyLibTemplateScript;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 妯℃澘闂嵎棰樼洰Service鎺ュ彛
@@ -59,4 +62,12 @@
      * @return 缁撴灉
      */
     public int deleteSvyLibTemplateScriptByTopicid(Long topicid);
+
+    /**
+     * 鏍规嵁闂id缁熻閫夐」
+     *
+     * @param serviceSubtaskCountReq
+     * @return 缁撴灉
+     */
+    public Map<Long, ServiceSubtaskScriptCount> countPatByScript(ServiceSubtaskCountReq serviceSubtaskCountReq);
 }
diff --git a/smartor/src/main/java/com/smartor/service/impl/SvyLibTemplateScriptServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/SvyLibTemplateScriptServiceImpl.java
index ff066d2..0f9761f 100644
--- a/smartor/src/main/java/com/smartor/service/impl/SvyLibTemplateScriptServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/SvyLibTemplateScriptServiceImpl.java
@@ -1,13 +1,23 @@
 package com.smartor.service.impl;
 
 import com.ruoyi.common.utils.DateUtils;
-import com.smartor.domain.SvyLibTemplateScript;
+import com.smartor.domain.*;
+import com.smartor.mapper.ServiceSubtaskMapper;
 import com.smartor.mapper.SvyLibTemplateScriptMapper;
 import com.smartor.service.ISvyLibTemplateScriptService;
+import com.smartor.service.ISvyLibTemplateTargetoptionService;
+import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+
+import static net.sf.jsqlparser.parser.feature.Feature.values;
 
 /**
  * 妯℃澘闂嵎棰樼洰Service涓氬姟灞傚鐞�
@@ -18,8 +28,13 @@
 @Service
 public class SvyLibTemplateScriptServiceImpl implements ISvyLibTemplateScriptService
 {
+    ISvyLibTemplateTargetoptionService svyLibTemplateTargetoptionService;
+
     @Autowired
     private SvyLibTemplateScriptMapper svyLibTemplateScriptMapper;
+
+    @Autowired
+    private ServiceSubtaskMapper serviceSubtaskMapper;
 
     /**
      * 鏌ヨ妯℃澘闂嵎棰樼洰
@@ -94,4 +109,80 @@
     {
         return svyLibTemplateScriptMapper.deleteSvyLibTemplateScriptByTopicid(topicid);
     }
+
+    public Map<Long, ServiceSubtaskScriptCount> countPatByScript(ServiceSubtaskCountReq serviceSubtaskCountReq)
+    {
+        Map<Long, ServiceSubtaskScriptCount> result = new HashMap<>();
+        serviceSubtaskCountReq.setType("2");
+        List<ServiceSubtaskScriptCount> counts =  serviceSubtaskMapper.getSfStatisticsScriptDetails(serviceSubtaskCountReq);
+        List<ServiceSubtaskScriptCount> itemCounts = serviceSubtaskMapper.getSfStatisticsScriptItemDetails(serviceSubtaskCountReq);
+
+        if(ObjectUtils.isNotEmpty(counts)){
+            for(ServiceSubtaskScriptCount count:counts){
+                Long scriptid = count.getScriptid();
+                //鎺掗櫎scriptid涓虹┖鐨勬儏鍐�
+                if(ObjectUtils.isEmpty(scriptid)){
+                    continue;
+                }
+                Map<String, ServiceSubtaskScriptCount> itemCountMap = new HashMap<>();
+                //闂嵎鍔犱笂绌虹櫧閫夐」
+                if(ObjectUtils.isNotEmpty(count.getTemplateid())
+                        && ObjectUtils.isNotEmpty(count.getSubtaskType())
+                        && count.getSubtaskType().equals("2")){
+                    SvyLibTemplateScript script = selectSvyLibTemplateScriptByTopicid(scriptid);
+                    if(ObjectUtils.isNotEmpty(script)){
+                        SvyLibTemplateTargetoption targetoptionVo = new SvyLibTemplateTargetoption();
+                        targetoptionVo.setOrgid(script.getOrgid());
+                        targetoptionVo.setScriptid(script.getScriptid());
+                        List<SvyLibTemplateTargetoption> targetoptions
+                                = svyLibTemplateTargetoptionService.selectSvyLibTemplateTargetoptionList(targetoptionVo);
+                        if(ObjectUtils.isNotEmpty(targetoptions)){
+                            //濉叆绌虹櫧淇℃伅
+                            targetoptions.forEach(targetoption ->{
+                                ServiceSubtaskScriptCount emptyCount = new ServiceSubtaskScriptCount();
+                                emptyCount.setScriptid(count.getScriptid());
+                                emptyCount.setScriptContent(count.getScriptContent());
+                                emptyCount.setScriptType(count.getScriptType());
+                                emptyCount.setSubtaskType(count.getSubtaskType());
+                                emptyCount.setCompletedQuantity(count.getCompletedQuantity());
+                                emptyCount.setAllQuantity(count.getAllQuantity());
+                                emptyCount.setCompletedPercentage(count.getCompletedPercentage());
+                                emptyCount.setTemplateid(count.getTemplateid());
+                                emptyCount.setChosenQuantity(0);
+                                emptyCount.setChosenPercentage("0.0");
+                                emptyCount.setOptionText(targetoption.getOptioncontent());
+                                itemCountMap.put(targetoption.getOptioncontent(),emptyCount);
+                            });
+                        }
+                    }
+                }
+                itemCounts.forEach(itemCount ->{
+                    if(ObjectUtils.isNotEmpty(count.getScriptid()) && ObjectUtils.isNotEmpty(itemCount.getScriptid())){
+                        if(count.getScriptid().equals(itemCount.getScriptid())){
+                            //鏀惧叆缁熻淇℃伅
+                            itemCount.setScriptContent(count.getScriptContent());
+                            itemCount.setScriptType(count.getScriptType());
+                            itemCount.setSubtaskType(count.getSubtaskType());
+                            itemCount.setCompletedQuantity(count.getCompletedQuantity());
+                            itemCount.setAllQuantity(count.getAllQuantity());
+                            itemCount.setCompletedPercentage(count.getCompletedPercentage());
+                            itemCount.setTemplateid(count.getTemplateid());
+                            //璁$畻閫夋嫨姣斾緥
+                            int chosenQuantity = ObjectUtils.isNotEmpty(itemCount.getChosenQuantity())?itemCount.getChosenQuantity():0;
+                            int completedQuantity = itemCount.getCompletedQuantity();
+                            if(ObjectUtils.isNotEmpty(completedQuantity) && completedQuantity != 0){
+                                BigDecimal chosenPercentage = (new BigDecimal(chosenQuantity)).divide(new BigDecimal(completedQuantity), 2, RoundingMode.HALF_UP);
+                                itemCount.setChosenPercentage(chosenPercentage.toString());
+                            }
+                            itemCountMap.put(itemCount.getOptionText(), itemCount);
+                        }
+                    }
+                });
+                List<ServiceSubtaskScriptCount> details = new ArrayList<>(itemCountMap.values());
+                count.setDetails(details);
+                result.put(scriptid, count);
+            }
+        }
+        return result;
+    }
 }
diff --git a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskDetailMapper.xml b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskDetailMapper.xml
index cef69bb..c2717fc 100644
--- a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskDetailMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskDetailMapper.xml
@@ -418,7 +418,7 @@
         FROM service_subtask_detail
             JOIN service_task
         ON service_task.taskid = service_subtask_detail.taskid
-            JOIN ivr_liba_target ON ivr_liba_target.id = service_subtask_detail.targetid
+        JOIN ivr_liba_target ON ivr_liba_target.id = service_subtask_detail.targetid
         WHERE
             targetid = #{targetid}
         GROUP BY service_task.taskid,
diff --git a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
index 64351d6..ea1985a 100644
--- a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
@@ -1452,6 +1452,10 @@
         <if test="configValue != null and configValue != ''">
             AND ssd.categoryid IN (${configValue})
         </if>
+        <!-- 閫傜敤鍗曟潯鏌ヨ -->
+        <if test="scriptids != null">
+            AND ssd.scriptid in (${scriptids})
+        </if>
         group by ssd.scriptid) b
         ON a.id = b.scriptid
     </select>

--
Gitblit v1.9.3